我正在使用一个外部组件,它定期从工作线程中拍摄事件。在我的事件处理程序中,我使用 Dispatcher 在主线程上调用某些方法。这很好用...
private void HandleXYZ(object sender, EventArgs e)
{
...
if(OnTrigger != null)
dispatcher.Invoke(OnTrigger, new TimeSpan(0, 0, 1), e);
}
但是,当程序关闭和外部组件 Dispose()s 时,程序 有时会挂起(并且只能在任务管理器中看到并杀死)。
当我查看正在发生的事情时,看起来“组件”正在等待事件在主线程上返回(它停留在 Dispose() 方法中),而工作线程等待调度程序调用上述调用主线程(它挂在 dispatcher.Invoke-line 中)。
现在我通过向 Invoke 添加超时来解决关闭问题,这似乎有效但感觉不对。有没有更清洁的方法来做这样的事情?我可以强制主线程在关闭之前花一些时间处理其他线程的作业吗?
我试图在关闭之前“断开”事件,但这无济于事,因为调度程序(可能)已经在等待,当程序开始关闭时......
PS:外部组件在这里意味着我无权访问源代码...