Приложение.Запуск выдает исключение ArgumentException, которое не было обработано

StackOverflow https://stackoverflow.com/questions/389551

Вопрос

У меня есть условие, при котором мне нужно закрыть приложение, и поэтому я вызываю это.Dispose () когда я устанавливаю флаг сертификата.

Сначала я подумал, что это проблема вызова функций после того, как я вызову это.Dispose () и поэтому я переместил код так, чтобы он вызывался последним, но я по-прежнему получаю сообщение "ArgumentException был необработан", "Параметр недопустим". В приложении.Запустить (новое MyApp ();линия.

Что я делаю не так?Я что-то пропустил по пути?Или, может быть, есть лучший способ закрыть приложение?

Это было полезно?

Решение

Попробуйте использовать Application.Exit() чтобы выйти из приложения.

Когда вы используете Application.Run(new MyForm());, цикл сообщений создается в потоке с использованием объекта form в качестве основной формы.Он пытается доставить сообщения Win32, которые поступают в приложение, к их соответствующим объектам.Однако, когда вы звоните Dispose() в объекте form вы еще не вышли из цикла сообщений.Когда он пытается доставить следующее сообщение вашему объекту формы, происходит сбой, поскольку оно уже удалено и выдает исключение.Вам следует либо запросить закрытие формы (позвонив по Close в форме), который затем попросит форму обработать событие и, в случае завершения, впоследствии выйти из цикла сообщений.Другой способ (более прямой способ) - полностью отключить цикл сообщений в потоке, вызвав Application.Exit() что приведет к закрытию всех связанных форм.

Другие советы

Вам следует использовать это.Close() вместо этого.Dispose() для закрытия вашей основной формы.

если вы закрываете приложение и, таким образом, выгружаете AppDomain, вам на самом деле не нужно вызывать Dispose(), поскольку все из AppDomain будет удалено из памяти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top