Необходимо подписаться на некое событие, происходящее при завершении приложения, но происходящее ДО ожидания завершения всех foreground thread'ов.
Есть такое? AppDomain.ProcessExit происходит после, и не подходит.
Нужно это всё чтобы при завершении приложения исвестить foreground thread'ы (вызвать ManualResetEvent.Set(), чтобы они тоже завершались, а то происходит подвисание, т.к. главный тред ждет завершения остальных, а они и не знают что надо завершаться.
Использовать Thread.IsBackground=true нельзя, т.к. тред должен завершиться корректно, и должен подчистить за собой всё что надо.