Как убить процесс BackgroundWorker, когда он ожидает внешнего события

У меня есть процесс BackgroundWorker, созданный таким образом:

_worker = new BackgroundWorker();
_worker.WorkerSupportsCancellation = true;
_worker.DoWork += WaitForCard;
_worker.RunWorkerAsync();

Рабочий процесс вызывает API для смарт-карты (например, это API-функция SCardGetStatusChange). Этот вызов блокирует выполнение, пока карта не будет помещена в считыватель.

Проблема в том, когда я закрываю приложение Winform. Я использую:

    _worker.CancelAsync();
    _worker.Dispose();

Рабочий процесс установил для своего свойства CancellationPending значение true, и основная форма закрылась, однако приложение фактически не закрывается, поскольку рабочий процесс все еще ожидает внешнего ввода.

Как завершить рабочий процесс, даже когда он ожидает внешнего ввода?

1 ответ

Решение

РЕДАКТИРОВАТЬ: Чтобы заставить функцию SCardGetStatusChange отменить, используйте SCardCancel: https://msdn.microsoft.com/en-us/library/windows/desktop/aa379470(v=vs.85).aspx

Другие вопросы по тегам