我需要从我的文件系统结构填充treeview。我的代码没有任何问题。但是当我尝试填充“C”驱动器时需要花费很多时间。所以我决定使用BackroundWorker。问题我在下面得到了这个例外。
正在从错误的线程调用正在对此控件执行的操作。使用Control.Invoke或Control.BeginInvoke对正确的线程进行Marshal来执行此操作。
我已搜索解决方案并添加此声明
CheckForIllegalCrossThreadCalls = false
它没有工作。所以我搜索了Asyncron编程并试图实现开始调用我现在就做了,现在我更困惑
答案 0 :(得分:0)
您可以使用以下扩展方法或多或少地自动切换线程。
public static void InvokeIfRequired(this ISynchronizeInvoke iSyncInvoke, Delegate iAction, object[] args = null)
{
if (iSyncInvoke.InvokeRequired)
iSyncInvoke.Invoke(iAction, args);
else
iAction.DynamicInvoke(args);
}
然后,您可以使用此扩展方法来控制在正确的线程上调用委托,如下所示。
Control SomeControl;
Action iAction = () =>
{
// do something with control
}
SomeControl.InvokeIfRequired(iAction);