выход из приложения ac # оставляет его в памяти - PullRequest
0 голосов
/ 19 января 2010

Я использую c # для написания формы Windows, которая устанавливает и развертывает WSP на сервере sharepoint.Проблема, с которой я сталкиваюсь, заключается в том, что при обнаружении проблемы и выходе из приложения или при нажатии крестика в правом верхнем углу формы форма закрывается, но задача все еще находится в списке процессов.

Мой выходкод:

this.close();
application.quit();

Способ, которым я изменяю формы:

form2.show();
form1.hide();

Пока я могу только предположить, что я использую несколько фоновых работников, возможно, они не заканчиваютсяв то же время?

Спасибо

Ответы [ 2 ]

3 голосов
/ 19 января 2010

Процесс завершается, когда завершаются все потоки, которые не заданы как фоновые потоки.

BackgroundWorker внутренне вызывает BeginInvoke для делегата, что приводит к запуску потока кода из ThreadPool.В потоках ThreadPool для IsBackground установлено значение true, поэтому приложение не должно зависать.Маловероятно, что BackgroundWorker вызывает проблему.

Скорее всего, в вашем коде есть место, где вы вручную создаете новый поток с использованием new Thread() или аналогичным, и вы не установили * 1006 этого потока* IsBackground член в true.

1 голос
/ 19 января 2010

Присоединить отладчик должно быть довольно легко (вы можете получить Managed Stack Explorer , если у вас нет отладчика на компьютере, на котором обнаружена проблема), и вы можете ворваться в процесс, чтобы увидеть какие потоки в настоящее время выполняются. В Visual Studio вы должны заглянуть в окно Threads и найти тот, который выполняет ваш код. Дважды щелкните по нему, а затем загляните в окно Call Stack, чтобы увидеть, что его удерживает.

...