C# 调用和<;控制>;。援引

C# 调用和<;控制>;。援引,c#,winforms,C#,Winforms,Winforms应用程序。后台线程从MQ检索消息并在UI线程上进行更改 我需要调用此方法来更新自定义列表 private void UpdateList() { if (ctrlLabel.IsHandleCreated) { ctrlLabel.Invoke(new Action(() => { //Do Something

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

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

    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更改为仅调用,并且它可以工作(仅用于第二次调用)

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


在Win7.Net 4.0上可以看到,.Net 4.0

[control]。调用特定于该特定控件的
调用,如果使用调用,则它指的是当前表单

因此:

上述各项等于:

this.Invoke(new Action(() => ....
其中
为当前表单

在删除项目时,当我尝试刷新时,此错误将以Null显示 异常错误

如果由于
delete
而使控件为
null
,则将获得NRE

   Invoke(new Action(() => ....
this.Invoke(new Action(() => ....