закрыть всю форму в winforms, используя c # - PullRequest
0 голосов
/ 23 января 2012

Каков наилучший способ закрыть всю форму приложения Windows, когда приложение закрыто?Видимо, после того, как я выйду из приложения, оно все еще работает.

Ответы [ 4 ]

4 голосов
/ 23 января 2012

Если приложение все еще работает после закрытия основной формы приложения, у вас есть какой-то поток, который не завершен с его работой. Вы должны идентифицировать это и удостовериться, что это закрывается изящно. Когда это будет сделано, ваш процесс подачи заявок должен удачно завершиться, когда вы закроете основную форму, без необходимости извлекать оружие и стрелять в него.

2 голосов
/ 23 января 2012

После комментария Бали используйте:

Application.Exit()

Подробности на http://msdn.microsoft.com/en-us/library/ms157894.aspx (выделено мое):

Метод Exit останавливает все запущенные циклы сообщений во всех потоках и закрывает все окна приложения . Этот метод не обязательно вынудить приложение выйти. Метод выхода обычно вызывается из цикла сообщений и заставляет Run вернуться. Чтобы выйти из цикла сообщений только для текущего потока, вызовите ExitThread.

0 голосов
/ 27 января 2012

В идеале, вы должны выяснить, ПОЧЕМУ ваше приложение все еще висит, согласно ответу Фредкрика. Однако, если вы хотите принудительно завершить работу приложения, Environment.Exit - это то, что вам нужно. Application.Exit выходит только из текущей рассылки сообщений (хотя, по общему признанию, у вас будет только включение, если вы не вызывали Application.Run более одного раза).

Из документа:

Environment.Exit Method Завершает этот процесс и дает базовой операционной системе указанный код выхода.

Приложение. Метод выхода Информирует все рассылки сообщений о том, что они должны прекратить работу, а затем закрывает все окна приложений после обработки сообщений.

0 голосов
/ 23 января 2012

Не самый красивый способ закрыть программу, но если вы просто хотите полностью завершить процесс, просто запустите Process.Kill() для себя. Если есть запущенные потоки, которые еще не завершились, лучше было бы сначала аккуратно закрыть их. Если вас не волнует, что еще не закончено, это поможет:

foreach (Process p in Process.GetProcesses()) 
{ 
    if (p.ProcessName.Contains("appname")) 
    { 
        p.Kill();
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...