Убедитесь, что все потоки закрыты или принудительно закрыты ниткой?

Я приложение WPF/С#, которое имеет psuedo-процесс Нажмите кнопку > Начать поток, чтобы сделать снимок с API веб-камеры > Мгновенный API веб-камеры > API запускает поток обратного вызовa > Выполняется съемкa > Объект API расположен

Эти шаги обычно работают, за исключением последней части, где поток обратного вызова API веб-камеры не закрывается. Таким образом, в моем диспетчере задач я всегда получаю процесс "призрак", который имеет то же имя, что и мое базовое приложение WPF. Кроме того, второй вызов того же API веб-камеры (чтобы сделать второй снимок) терпит неудачу.

Итак, я пытаюсь найти способ убедиться, что все мои потоки из моего корневого приложения принудительно закрыты в любое время. Есть ли способ убедиться, что нити не оставлены?

3 ответа

Если вы установите IsBackground значение true в этих потоках, они будут завершены при завершении работы.


Если у вас есть окно в вашем приложении, установите Application.ShutdownMode в OnMainWindowClose. Это остановит любые текущие фоновые потоки для вас, когда основное окно закроется. Программно вы можете вызвать Environment.Exit, чтобы убить все потоки как можно более грациозно (но сильно, если нет) и выйти из приложения.


Если вы видите какой-то призрачный процесс, помимо вашей основной программы, это не проблема потока. Вы создали другой процесс для выполнения операции. Убей это. Ваши ресурсы будут выпущены. Вам не нужно беспокоиться о том, что потоки выполняются, когда возникает большая проблема - другой процесс зависает с ресурсами.

licensed under cc by-sa 3.0 with attribution.