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更改为仅调用,并且它可以工作(仅针对第二个调用)
//MARK
Invoke(new Action(() =>
{
ctrlListView.LoadData();
}
));
//MARK
那么,Invoke和control.Invoke在操作上有什么不同呢?
在Win7、.Net 4.0上显示
发布于 2013-01-30 13:33:48
特定于特定控件的[control].Invoke
调用,如果使用Invoke
,则它引用当前窗体的this
。
所以:
Invoke(new Action(() => ....
上面的条件等于:
this.Invoke(new Action(() => ....
其中this
是当前表单。
在删除项目时,当我尝试刷新时,此错误与空异常错误一起输出。
如果你因为delete
而控制了null
,那么你就会得到NRE。
https://stackoverflow.com/questions/14597346
复制相似问题