У меня есть приложение, которое использует AutoResetEvent (WaitOne/Set) в очереди для обработки сообщений. Я заметил, что когда я завершаю сеанс отладки из Visual Studio (Shift+F5), исходный процесс для приложения зависает (но не всегда). Я вручную повторно подключаю отладчик к процессу и вижу, что один поток застрял в WaitHandle.WaitOne.
Итак, мой вопрос: как правильно завершать потоки, которые могут находиться в состоянии WaitOne?
Первый ответ, который пришел мне в голову, заключался в том, чтобы прослушать событие Application Exit и выполнить там Set, но я не был уверен, было ли это событие надежно вызвано после этих сеансов отладки или существует более стандартная практика, о которой я не знаю. из.
И, в качестве второго вопроса, вы бы справились с этим по-другому для приложения, работающего в «производственном» режиме?