【发布时间】:2009-09-07 18:49:21
【问题描述】:
我有一个用户控件,它可以做一些后台工作。当事物有一个完成的事件时,用户控件订阅了该事件。由于事件是在单独的线程中引发的,并且事件处理程序对用户控件进行了一些更新,因此我使用以下命令启动事件处理程序:
private void ProcessProcessCompleted(object sender, ProcessCompletedEventArgs e)
{
if (InvokeRequired)
{
Invoke(new Action<object, ProcessCompletedEventArgs>(ProcessProcessCompleted),
new[] { sender, e });
return;
}
// Update the user control, etc.
}
这可以正常工作,除非包含用户控件的表单在该过程完成之前关闭。我试图在用户控件的 dispose 方法中取消订阅该事件,但这似乎只在部分时间起作用。我应该怎么做?希望避免将其包装在 try catch 块中。是否有 InvokeIsPossible 属性或我可以在调用之前检查的内容?
【问题讨论】:
标签: c# winforms multithreading event-handling