表单调用导致奇怪的异常

时间:2011-09-25 18:46:45

标签: c# .net multithreading forms

我在Form

中有以下方法
public void Bye()
{
     if (InvokeRequired && IsHandleCreated)
     {
         Invoke(new Action(Bye));
         return;
     }
     Close();
}

此表单是在主窗体的线程中创建的,但是此方法是从System.Threading.Timer回调调用的。在调用Application.Run。

之前,在Main方法中创建计时器

我的应用程序使用Bye方法有很多这些形式。计时器每秒调用一个随机形式的Bye方法。 如果我让应用程序运行几分钟,我会在Invoke调用时遇到异常。

是异常消息
Invoke or BeginInvoke cannot be called on a control until the window handle has been created.

奇怪的是,当异常发生时,Visual Studio告诉我 InvokeRequired和IsHandleCreated都是false。在这种情况下,它甚至可以尝试调用Invoke? 我错过了什么?

1 个答案:

答案 0 :(得分:1)

更改顺序:

if (IsHandleCreated && InvokeRequired)

关于VS调试器:它可以评估两个属性以在Watch窗口中显示它们的结果,此时它们可能返回false。

相关问题