ProcessExit против DomainUnload - PullRequest
       7

ProcessExit против DomainUnload

10 голосов
/ 25 июня 2009

Я работаю над ошибкой, при которой код не всегда выполняется до закрытия приложения. Код находился в обработчике для события AppDomain.CurrentDomain.DomainUnload.

Я нашел сообщение от кого-то с той же проблемой, кто получил этот совет

"К тому времени, когда событие DomainUnload происходит для вашего домена приложения по умолчанию, ваш код перестал выполняться Вы, вероятно, можете делать то, что вам нужно с Событие ProcessExit в домене приложений по умолчанию. "

Это сработало для меня, но я хотел бы знать, почему. Я не смог найти много информации ни об этих событиях, ни о различиях между ними. Мне также интересно, если мне нужно подписаться на оба или достаточно ProcessExit.

EDIT:

Я хотел бы добавить больше информации, чтобы сделать это немного более полезным.

Я не учел, что новые потоки создаются в их собственном домене приложений. Поскольку я хотел, чтобы этот код выполнялся не только по завершении родительского процесса, но и по завершении каждого потока, мне нужно было подписаться на событие DomainUnload для обработки завершения каждого потока, а также на событие ProcessExit, которое нужно отлавливать после завершения родительского процесса.

1 Ответ

13 голосов
/ 25 июня 2009

ProcessExit должно быть достаточно.

Событие DomainUnload предназначено для обработки другими доменами приложений, а не для выгружаемого AppDomain. В результате, если обработчик подключен в выгружаемом домене, он может не работать. Событие ProcessExit предназначено для запуска, когда процесс собирается на выход.

...