C# 什么';s创建委托C时出错#

C# 什么';s创建委托C时出错#,c#,.net,multithreading,delegates,C#,.net,Multithreading,Delegates,我试图编写这段代码来在backgroundworker工作时更新文本框的文本 #区域变量 公共委托void updateTextBoxDelegate(字符串s,bool目录); updateTextBoxDelegate delegateTextBox; #端区 #1承包商所在区域 delegateTextBox=新的updateTextBoxDelegate(updateTextBox); #端区 #区域方法 public void updateTextBox(字符串s,bool目录) {

我试图编写这段代码来在backgroundworker工作时更新文本框的文本

#区域变量
公共委托void updateTextBoxDelegate(字符串s,bool目录);
updateTextBoxDelegate delegateTextBox;
#端区
#1承包商所在区域
delegateTextBox=新的updateTextBoxDelegate(updateTextBox);
#端区
#区域方法
public void updateTextBox(字符串s,bool目录)
{
如果(目录)
{
textBox1.Text+=s+System.Environment.NewLine;
}
其他的
{
textBox1.Text+=“-->”+s+System.Environment.NewLine;
}
}
#端区
#区域内的某处Backgroundworker\u doWork
delegateTextBox(path.FullName,true);
#端区
在这种情况下,会出现交叉线程的例外情况:

在这里:

在这里:

      delegateTextBox(path.FullName, true);
有什么错误


谢谢

如果我理解得很好,后台线程无法直接操作UI控件。如果您使用的是WPF,那么可以尝试使用Dispatcher。不要创建自己的线程,而是在后台工作中执行类似的操作

Object[] args = {path.FullName, true };
this.Dispatcher.BeginInvoke(delegateTextBox, args);

希望这会有所帮助。

不要创建自定义委托。改用
System.Action
。我不完全确定你的问题是什么,但出于某种原因,我觉得答案在这里:。这也有助于解释交叉线程和您已经回答问题的UI:您有一个在调用时更改文本框的委托;从BackgroundWorker调用委托,即从GUI线程以外的线程调用委托;这会导致交叉线程异常。解决方案:我被告知委托专门用于管理跨线程异常。。。不是吗?定义委托不会自动使UI更新线程安全。您需要做的是使用Control.BeginInvoke等方法将更新UI的责任委托给UI线程。查看我在上面提供的两个链接,它们展示了如何做你想要做的事情的例子。
Object[] args = {path.FullName, true };
this.Dispatcher.BeginInvoke(delegateTextBox, args);