首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Invoke和<Control>.Invoke之间的区别

Invoke和<Control>.Invoke之间的区别
EN

Stack Overflow用户
提问于 2013-01-30 13:31:17
回答 1查看 84关注 0票数 0

Winforms应用程序。后台线程从MQ检索消息,并在UI线程上进行更改。

我需要调用此方法来更新自定义列表

代码语言:javascript
运行
复制
    private void UpdateList()
    {         
        if (ctrlLabel.IsHandleCreated)
        {
            ctrlLabel.Invoke(new Action(() =>
            {
                //Do Something
            }
            ));
        }

        ctrlListView.Data = package;

       //MARK
       ctrlListView.Invoke(new Action(() =>
        {
            ctrlListView.LoadData();
        }
        )); 
       //MARK           
    }

后台线程两次都会调用此方法。但是,这适用于控件刚实例化后的第一次调用。

在删除项目时,当我尝试刷新时,此错误与Null异常错误一起输出。

有趣的是,我可以通过一些小的修改来运行它。我将Control.Invoke更改为仅调用,并且它可以工作(仅针对第二个调用)

代码语言:javascript
运行
复制
       //MARK
       Invoke(new Action(() =>
        {
            ctrlListView.LoadData();
        }
        )); 
       //MARK           

那么,Invoke和control.Invoke在操作上有什么不同呢?

在Win7、.Net 4.0上显示

EN

回答 1

Stack Overflow用户

发布于 2013-01-30 13:33:48

特定于特定控件的[control].Invoke调用,如果使用Invoke,则它引用当前窗体的this

所以:

代码语言:javascript
运行
复制
   Invoke(new Action(() => ....

上面的条件等于:

代码语言:javascript
运行
复制
this.Invoke(new Action(() => ....

其中this是当前表单。

在删除项目时,当我尝试刷新时,此错误与空异常错误一起输出。

如果你因为delete而控制了null,那么你就会得到NRE。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14597346

复制
相关文章

相似问题

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