我在Form
中有以下方法public void Bye()
{
if (InvokeRequired && IsHandleCreated)
{
Invoke(new Action(Bye));
return;
}
Close();
}
此表单是在主窗体的线程中创建的,但是此方法是从System.Threading.Timer
回调调用的。在调用Application.Run。
我的应用程序使用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? 我错过了什么?
答案 0 :(得分:1)
更改顺序:
if (IsHandleCreated && InvokeRequired)
关于VS调试器:它可以评估两个属性以在Watch窗口中显示它们的结果,此时它们可能返回false。