首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AsyncCallback抛出异常

AsyncCallback抛出异常
EN

Stack Overflow用户
提问于 2011-07-07 15:18:49
回答 2查看 195关注 0票数 0

在Winform中,我在AsyncCallback期间得到异常:“在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke”。

该应用程序在其它计算机上工作正常。我想知道是否有可能是计算机或网络设置导致了异常。回调是一个跨域的回调,但是所有的数据都是在Winform中接收和显示的,然后就会发生异常。

该异常是一个致命的异常,并出现Windows消息"App.. has stopped“。

编辑1:

代码语言:javascript
复制
public void OpenFormCallback(IAsyncResult ar)
{
    // 'this' is a Winform  
    this.BeginInvoke(new DelegateVoid(SetDataSource));
}

它正常工作,现在在例外情况下,存在一个非常快的网络连接,这可能是尚未创建句柄的原因。才意识到这一点。

我是否应该尝试:

代码语言:javascript
复制
public void OpenFormCallback(IAsyncResult ar)
    {
        // 'this' is a Winform  
        while (!this.IsHandleCreated) { }
        this.BeginInvoke(new DelegateVoid(SetDataSource));
    }

?冒着永无止境的风险?

编辑2:我试过了:

代码语言:javascript
复制
public void OpenFormCallback(IAsyncResult ar)
    {
        // 'this' is a Winform  
        if (IsHandleCreated) { CreateHandle() }
        this.BeginInvoke(new DelegateVoid(SetDataSource));
    }

但是没有显示主窗体,它的状态是“没有响应”。

EN

回答 2

Stack Overflow用户

发布于 2011-07-07 15:21:25

在从回调调用invoke/BeginInvoke之前添加检查yourform.IsHandleCreated

票数 0
EN

Stack Overflow用户

发布于 2011-07-07 18:21:59

试试这个:

代码语言:javascript
复制
public void OpenFormCallback(IAsyncResult ar)
{
    while (!this.IsHandleCreated) { Application.DoEvents(); }
    this.BeginInvoke(new DelegateVoid(SetDataSource));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6607162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档