Подтвердить что ты не робот

ProcessExit vs DomainUnload

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

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

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

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

EDIT:

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

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

4b9b3361

Ответ 1

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

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