如何在等待外部事件时终止 BackgroundWorker 进程

How to kill a BackgroundWorker process when it is waiting for an external event

我有一个这样创建的 BackgroundWorker 进程:

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

工作进程正在为智能卡调用 API(例如它是 SCardGetStatusChange 函数 API)。该调用会阻止执行,直到将卡片放在 reader 上。

问题出在我关闭 Winform 应用程序时。我正在使用:

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

工作进程将其 CancellationPending 属性 设置为 true 并且主窗体关闭,但是,应用程序实际上并未退出,因为工作进程仍在等待外部输入。

如何在等待外部输入的情况下完成工作进程?

编辑:要强制取消 SCardGetStatusChange 函数,请使用 SCardCancel:https://msdn.microsoft.com/en-us/library/windows/desktop/aa379470(v=vs.85).aspx