【发布时间】:2011-07-07 18:21:58
【问题描述】:
在 Winform 中出现异常:“在创建窗口句柄之前,无法在控件上调用 Invoke 或 BeginInvoke”在 AsyncCallback 期间。
该应用程序在其他计算机上正常运行。我想知道是否有可能导致异常的计算机或网络设置。回调是跨域回调,但是所有的数据都接收到Winform中显示出来,就会出现异常。
该异常为致命异常,并出现 Windows 消息“App.. has stop working”。
编辑 1:
public void OpenFormCallback(IAsyncResult ar)
{
// 'this' is a Winform
this.BeginInvoke(new DelegateVoid(SetDataSource));
}
通常它可以工作,现在在特殊情况下存在非常快速的网络连接,这可能是尚未创建句柄的原因。刚刚意识到这一点。
我应该试试:
public void OpenFormCallback(IAsyncResult ar)
{
// 'this' is a Winform
while (!this.IsHandleCreated) { }
this.BeginInvoke(new DelegateVoid(SetDataSource));
}
?冒着永恒循环的风险?
编辑 2:我试过了:
public void OpenFormCallback(IAsyncResult ar)
{
// 'this' is a Winform
if (IsHandleCreated) { CreateHandle() }
this.BeginInvoke(new DelegateVoid(SetDataSource));
}
但是主窗体没有显示,它进入状态“没有响应”。
【问题讨论】:
-
代码中是否有一个地方可以调用
Control.Invoke?或者你不确定它在哪里被调用?
标签: winforms exception callback