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 Exception Errors。
有趣的是,我能够通过一些小修改来运行它。我将[Control] .Invoke改为Invoke,它可以工作(仅用于第二次调用)
//MARK
Invoke(new Action(() =>
{
ctrlListView.LoadData();
}
));
//MARK
那么,Invoke和[control] .Invoke在操作方面有何区别?
见到Win7,.Net 4.0
答案 0 :(得分:2)
[control].Invoke
特定于该特定控件的调用,如果您使用Invoke
,则它会引用this
这是当前的表单。
所以:
Invoke(new Action(() => ....
以上等于:
this.Invoke(new Action(() => ....
this
是当前表单的位置。
在删除项目时,当我尝试刷新时,这会出现Null错误 异常错误。
如果您因null
而控制delete
,那么您将获得NRE。