在我的应用程序中,我有一个使用线程池进行异步操作的用户控件。 线程池方法如下所示:
private void AsyncFunction(object state)
{
... do the calculation
//refresh the grid data on the UI thread
this.BeginInvoke(new MethodInvoker(() =>
{
... update the ui
}));
}
我的问题是,如果用户关闭对话框...用户控件被处理掉,我得到例外:
在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke。
您是否知道检测对话框是否被丢弃的方法?我不想在关闭时设置对话框设置的控件属性。 还有另一种解决方法吗?
谢谢,
拉杜
答案 0 :(得分:20)
答案 1 :(得分:7)
您可以使用Control.IsDisposed
属性。
try
{
if(!this.IsDisposed)
{
this.BeginInvoke(new MethodInvoker(() =>
{
// update my control
}
));
}
}
catch ( InvalidOperationException )
{
// Do something meaningful if you need to.
}
答案 2 :(得分:0)
您可以尝试使用EventWaitHandle之类的同步对象来通知主线程即将终止的工作线程。然后工作线程可以结束它的执行。