【发布时间】:2012-06-29 07:58:53
【问题描述】:
嗨,
我在 Application.Exit 期间运行了以下代码:
if (InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() => EndUpdate(Caller)));
return;
}
这会引发异常:在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke,但只能在应用程序正在运行时调用。
奇怪的是,当调试器因错误而中断时,我可以看到 InvokeRequired 和 IsHandledCreated 都设置为 false,所以我不确定它是如何访问内部代码(this.Invoke)的?
在这种情况下,我只想关闭应用程序,没有任何异常。
【问题讨论】:
-
在 if 语句上放一个断点,看看出错前的值是什么。
-
@saj > 我从来没有听说过如果出错了,所以我假设当它检查 InvokeRequired 和 IsHandleCreated 时,它会得到 True/True,但是在运行 Invoke 之前另一个线程会更改它.也许我可以在 Invoke 方法中实现对 IsHandleCreated 的检查,但这可能会导致同样的问题。
标签: c# winforms multithreading