#c# #windows-ce
#c# #windows-ce
Вопрос:
В приложении Windows CE я использую Application.Exit() для закрытия приложения, но одна из используемых мной dll не удалена и вызывает у меня проблему при попытке повторного запуска приложения.
Это потому, что Application.Exit() не удаляет ее, или я все еще где-то ее использую?
Каков правильный способ закрыть приложение?
Спасибо
Редактировать: Хорошо, чтобы предоставить более подробную информацию, вот мой сценарий:
Главная страница -> Давайте назовем это
Страница ожидания -> Давайте назовем это B
Страница, которая закрывает приложение -> Давайте вызовем этот C
При запуске приложения A открывает B, а B открывает C с помощью потока, вот почему я использую application.Exit(). Может быть, мне следует перейти к parent.parent.parent и вызвать close() в основной форме? 🙂
Комментарии:
1. Вы уверены, что она завершается после вызова Application. Exit()? Какую проблему вы видите при попытке повторного запуска приложения?
2. Я получаю сообщение об ошибке: «myDll.dll используется другим процессом «. Да, я уверен, что это происходит после того, как я завершаю работу с помощью приложения. Exit()
Ответ №1:
Обычно закрытие основной формы является выбранным способом выхода из приложения. Приложение.Исторически выход был менее предпочтительным способом, поскольку он подразумевал более резкое завершение работы, поскольку некоторые события закрытия не запускались (например, mainform.close и т.д.)
Комментарии:
1. Зависит от того, являются ли b и c модальными или нет.
2. Я бы попросил вашу форму C затем сообщить форме A о закрытии. Это закроет приложение более разумным способом — поскольку оно попросит другие формы закрыться, и они тоже смогут закрыть все части, которые у них открыты
3. @Pabuc: Можете ли вы попробовать что-то вроде foreach (Форма var в приложении. OpenForms) { var. Close(); }
4. @V4Vendetta Windows CE не поддерживает Application. OpenForms
Ответ №2:
В типичном приложении Application.Exit
вызов приведет только к завершению работы основного потока. Фоновые потоки, особенно не связанные с пользовательским интерфейсом, не будут завершены с помощью этого вызова. Если какая-либо из них останется запущенной, процесс продолжится.
Это вполне может быть причиной того, что вы все еще видите, что ресурсы удерживаются после вызова Application.Exit
. Один из способов быстрой проверки — посмотреть, продолжает ли процесс выполняться после Application.Exit
запусков. Если это так, то это почти наверняка ваша проблема.
Комментарии:
1. И каково ваше предложение? Страница, которая закрывает приложение, находится в потоке, отличном от основного потока..
2. @Pabuc моим предложением было бы создать центральный метод закрытия, который одновременно вызывает Application. Закрыть и сигнализирует фоновым потокам о завершении