检测是否处置了控制

时间:2010-12-16 12:23:23

标签: c# .net winforms

在我的应用程序中,我有一个使用线程池进行异步操作的用户控件。 线程池方法如下所示:

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。

您是否知道检测对话框是否被丢弃的方法?我不想在关闭时设置对话框设置的控件属性。 还有另一种解决方法吗?

谢谢,

拉​​杜

3 个答案:

答案 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之类的同步对象来通知主线程即将终止的工作线程。然后工作线程可以结束它的执行。