Потоки, процессы и Application.Exit () - PullRequest
3 голосов
/ 11 сентября 2010

Мое приложение состоит из основного цикла сообщений (GUI) и потоков (Task.Factory).

В темах я вызываю некоторые сторонние приложения с var p = new Process();

Но когда я вызываю Application.Exit(); в цикле сообщений - я вижу, что процессы, запущенные в потоках, все еще находятся в памяти и выполняются.

Итак, вопрос - как убить все потоки и процессы сразу после вызова Application.Exit();?

UPD

старый:

p.WaitForExit();

новый:

while (!p.WaitForExit(1000))
{
    if (FlagToExit)
    {
        p.Kill();
        return;
    }
}

Ответы [ 6 ]

8 голосов
/ 11 сентября 2010

Просто попробуйте это

, когда вы создаете поток, сделайте его фоновым потоком

Thread.IsBackground = true;

и на Application.Exit();

все потоки будут закрыты

3 голосов
/ 11 сентября 2010

Обработка события Application.ApplicationExit.

1 голос
/ 05 мая 2015

Это происходит потому, что все ваши темы Foreground.И поток Foreground (GUI) не может завершить другой поток Foreground.Так что вам просто нужно пометить ваши новые потоки как Background и таким образом дать новым потокам зависимость от вашего Foreground потока (GUI).Если вы хотите пометить тему как Background тему, просто добавьте ее в свой код:

p.IsBackground = true;
1 голос
/ 11 сентября 2010

Процессы создаются независимо от родительского процесса.

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

0 голосов
/ 26 апреля 2017

Используйте Invoke () и выполните команду Application.Exit () внутри следующим образом:

this.Invoke((Action)delegate ()
{
    Application.Exit();
});
0 голосов
/ 11 сентября 2010

Создайте класс, вызывающий процесс, и завершите его при его утилизации.

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