我的 Windows 窗体上有一个调用 RunWorkerAsync() 方法的按钮,它依次执行一个操作,然后更新同一窗体上的 ListBox。
在 DoWork 事件完成后,我为事件分配结果(这是一个列表),我处理 RunWorkerCompleted() 事件,然后执行以下代码来更新我的列表框
它调用这个:
(抱歉,代码格式化不起作用)
现在,当我运行应用程序并按下刷新按钮时,出现以下异常:
我该如何解决这个问题?
编辑:
在以下语句中抛出异常,这发生在我清除内容以使列表保持最新的 DoWork 方法中;
listBoxServers.Items.Clear();
最佳答案
您不能在列表框上调用 Invoke
,但可以在窗体上调用。对于 WinForms 应用程序,我使用类似的东西:
...
this.Invoke((MethodInvoker)delegate()
{
// Do stuff on ANY control on the form.
});
...
根据 .NET 版本,您可能必须自己为 MethodInvoker
声明一个委托(delegate)
public delegate void MethodInvoker();
但是,您也可以考虑使用后台工作程序的 ReportProgress
功能。应在表单线程的上下文中调用相应的事件处理程序。
关于c# - 从 BackgroundWorker 线程访问 UI 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4428817/