Что мне нужно знать:Как определить, когда основной поток завершается?
Я хотел бы, чтобы определить, когда основной поток (процесс?) Обрывается, так что я могу обеспечить определенные действия выполняются до того, как прекращается.
То, что я нашел себя:
Я нашел событий AppDomain.DomainUnload
и AppDomain.ProcessExit
. AppDomain.DomainUnload
, похоже, работает с не-приложениями, такими как MbUnit. AppDomain.ProcessExit
, похоже, работает с приложениями, но есть 3-секундный лимит времени, который мне действительно не нравится. Есть ли способ обнаружить, когда AppDomain/процесс завершается?
фон:
Ищу для такого события, чтобы обеспечить мой журнал будет persistet в файл, когда приложение завершается. Фактическое ведение журнала выполняется в другом потоке с использованием шаблона производителя-потребителя, где очень вероятно, что записи журнала могут стоять в очереди в памяти, и мне нужно обеспечить, чтобы эта очередь была сохранена в файл, когда приложение завершается.
Есть ли что-нибудь еще, о чем я должен знать?
Update:
Изменено выше, чтобы отразить то, что я узнал сам. Я не доволен 3-секундным лимитом во время ProcessExit. В документации MSDN действительно говорит, однако, что он может быть продлен:
Общее время выполнения всех обработчиков событий ProcessExit ограничен, так же, как общее время выполнения всех финализаторов ограниченно в процессе отключения. По умолчанию используется три секунд, которые могут быть переопределены неуправляемым хостом .
Кто-нибудь знает, как переопределить значение по умолчанию?
Другие идеи также высоко ценятся!
Развейте:
I have posted a follow up question to this.
Звуки своего рода Hacky :-). Надеюсь, что есть лучшее решение. Спасибо за идею, хотя! – 2009-09-02 16:23:55
Кстати, вы были правы о Domain.Unload, не работающем в приложении. Черт. – 2009-09-02 16:27:10
Похоже, что DomainUnload предназначен для предоставления события, когда дополнительные домены приложений, которые загружаются вашим приложением, выгружаются. Не знаю, почему это ограничение существует. –