C# 向richtextbox添加文本时,背景工作线程出现交叉线程异常

C# 向richtextbox添加文本时,背景工作线程出现交叉线程异常,c#,multithreading,C#,Multithreading,我试图编写一些检索和解析站点HTML的代码。我在这方面很成功,但当我尝试使用后台工作程序将其放入富文本框时,我得到了一个跨线程异常 List<string> retuInfo = new List<string>(); foreach (var inf in info) { retuInfo.Add(inf.InnerText); richTextBox1.Lines = retuInfo.ToArray(); } List retuInfo

我试图编写一些检索和解析站点HTML的代码。我在这方面很成功,但当我尝试使用后台工作程序将其放入富文本框时,我得到了一个跨线程异常

List<string> retuInfo = new List<string>();
foreach (var inf in info)
{
       retuInfo.Add(inf.InnerText);
       richTextBox1.Lines = retuInfo.ToArray();
}
List retuInfo=new List();
foreach(信息中的var inf)
{
retuInfo.Add(inf.InnerText);
richTextBox1.Lines=retuInfo.ToArray();
}
我在
richTextBox1.Lines=retuInfo.ToArray()上得到异常

我已经研究了“不安全线程和安全线程”的几个方面,但没有一个真正有用,因为线程是一个非常高级的主题,可能会给您带来一些硬错误


任何可能的帮助?

当您更新UI控件时,您应该从UI线程调用,而不是从
Backgroundworker
线程更新。要调用Ui线程,您应该使用
Invoke
BeginInvoke
调用Richtextbox控件上的线程Ui更新

你可以在这里参考:


在表单中定义一个方法,将行附加到控件:

public void SetRichTextBoxText(string[] lines)
{
    if(!richTextBox1.InvokeRequired)
    {
        richTextBox1.Lines = lines;
    }
    else
    {
        var callback = new Action<string[]>(SetRichTextBoxText);
        Invoke(callback, lines);
    }
}

我们在这里已经有过无数次了。。。Invoke是关键字。您还可以查看类。在哪个方法中使用此代码?如果您正在访问任何UI方法,请在ProgressChanged方法中编写逻辑,并使用ReportProgress方法调用它。因此,我正在查看您在那里提供给我的第二个链接,我尝试了这一方法,但仍然出现了一些错误,这有点让人困惑,但我走对了吗?List retuInfo=新列表();richTextBox1.Invoke(新操作(()richTextBox1.Lines=retuInfo.ToArray());修复了这次没有错误,除了现在没有发生任何事情?richTextBox1.Invoke(新操作(()=>richTextBox1.Lines=retuInfo.ToArray());是的!很抱歉,我意识到我没有把每件事都放回去。这是一个漫长的日常工作和漫长的编码之夜。我真的很感激这能帮助我更好地理解和学习男生。我真的很感激,真诚地希望我能把这两者都放在最好的答案上。-干得好,约翰。很高兴看到你能自己解决它。一个你能解释一下richTextBox1.Invoke(新操作(()=>richTextBox1.Lines=retuInfo.ToArray())是如何工作的吗?我不理解“新操作和=>”
form.SetRichTextBoxText(info.Select(inf => inf.InnerText).ToArray());