Como detectar quando o thread principal termina?

O que eu preciso saber:

Eu gostaria de detectar quando um thread principal (processo?) Termina para que eu possa garantir que certas ações sejam executadas antes de serem finalizadas.

O que eu me encontrei:

Eu encontrei os eventosAppDomain.DomainUnload eAppDomain.ProcessExit. AppDomain.DomainUnload parece funcionar com não-aplicativos como o MbUnit.AppDomain.ProcessExit parece funcionar com aplicativos, mas há um limite de tempo de 3 segundos que eu realmente não gosto. Há mais maneiras de detectar quando um AppDomain / processo termina?

Fundo:

Eu estou procurando por um evento para garantir que meu log é persistet para arquivar quando o aplicativo é encerrado. O log real é executado em outro encadeamento usando um padrão produtor-consumidor, em que é muito provável que entradas de log possam enfileirar-se na memória e eu preciso garantir que essa fila seja salva no arquivo quando o aplicativo for finalizado.

Há mais alguma coisa que eu deveria estar ciente?

Atualizar:

Mudou o acima para refletir o que eu descobri eu mesmo. Eu não estou feliz com o limite de tempo de 3 segundos durante o ProcessExit. A documentação do MSDN diz que ele pode ser estendido:

O tempo total de execução de todos os manipuladores de eventos do ProcessExit é limitado, assim como o tempo total de execução de todos os finalizadores é limitado no encerramento do processo. O padrão é três segundos, que podem ser substituídos por um host não gerenciado.

Alguém sabe como substituir o padrão?

Mais ideias também são muito apreciadas!

Acompanhamento:

Eu postei uma pergunta de acompanhamento para isso.

questionAnswers(5)

yourAnswerToTheQuestion