如何在等待外部事件时终止 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
我有一个这样创建的 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