Application.Run выбрасывает исключение ArgumentException - PullRequest
1 голос
/ 23 декабря 2008

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

Сначала я подумал, что это проблема вызова функций после вызова this.Dispose (), и поэтому я переместил код, чтобы он вызывался последним, но я все еще получаю "ArgumentException is unhandled" «. На Application.Run (новый myApp (); строка.

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

Ответы [ 3 ]

6 голосов
/ 23 декабря 2008

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

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

1 голос
/ 23 декабря 2008

Вы должны использовать this.Close (), а не this. Dispose (), чтобы закрыть основную форму.

0 голосов
/ 23 декабря 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...