Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 导致树崩溃的BackgroundWorker线程问题_C#_Winforms - Fatal编程技术网

C# 导致树崩溃的BackgroundWorker线程问题

C# 导致树崩溃的BackgroundWorker线程问题,c#,winforms,C#,Winforms,我有一个带树控件的WinForm应用程序。我正在BackgroundWorker线程中加载带有XML的树。使用小数据时一切正常。但这棵树被大数据破坏了,我无法找到任何原因 我得到未处理的异常,树并没有画在表单上。以下是一些细节- //object array is used for file types, path etc. object objArr = new object[5] { fileType, Path1, Path2, this.myWorker, returnType };

我有一个带树控件的WinForm应用程序。我正在BackgroundWorker线程中加载带有XML的树。使用小数据时一切正常。但这棵树被大数据破坏了,我无法找到任何原因

我得到未处理的异常,树并没有画在表单上。以下是一些细节-

//object array is used for file types, path etc. 
object objArr = new object[5] { fileType, Path1, Path2, this.myWorker, returnType };
this.myWorker.WorkerReportsProgress = true; 
this.myWorker.ProgressChanged += new ProgressChangedEventHandler(this.CompareWorker_ProgressChanged); 
this.myWorker.DoWork += new DoWorkEventHandler(this.myWorker_DoWork); 
this.myWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.myWorker_RunWorkerCompleted); 
this.myWorker.RunWorkerAsync(objArr);

myWorker\u DoWork
正在用XML构建树。树中的每个节点都是通过tree
Invoke(newaddnodes(AddNode),newobject[]{isChildNode,parentNode,childNode})添加的
inside
myWorker\u DoWork

我通过将所有UI更新从后台线程移到UI线程来解决此问题。在后台线程中执行业务逻辑并在UI线程中更新UI控件总是一个好的实践。这不会导致任何问题。

您的问题中仍然没有包括异常详细信息。如果你不提供所有细节,任何人都很难帮助你。我将在
OutOfMemoryException
…-)上赌1美元我观察到,问题似乎出现在我正在构建树的“我的工作人员运行工作已完成”中。我正在考虑将myWorker_Runworker Completed的所有方法移到外部,并通过UI线程进行调用。如何有效地做到这一点?例如,我在myWorker_RunWorkerCompleted中有一个方法Fun(),我想从这里移出Fun(),并通过UI线程调用。我通过将所有UI更新从后台线程移出UI线程来解决这个问题。在后台执行业务逻辑并在UI线程中更新UI控件总是一个好的实践。这永远不会引起任何问题。