RichTextBox在交叉线程操作中没有更新

本文关键字:更新 操作 线程 RichTextBox | 更新日期: 2023-09-27 17:49:29

下面是我的示例代码:

//------this is just GUI Form which is having RichTextBox (Access declared as Public)
//
public partial class Form1 : Form
{
   public void function1()
   {
      ThreadStart t= function2;
      Thread tStart= new Thread(t);
      tStart.Start();
   }
   public void function2()
   {
   //Calling function3 which is in another class
   }
}

//------this is just Class, not GUI Form
class secondClass: Form1
{
   public void function3()
   {
      Form1 f =new Form1();
      //Updating the RichTextBox(which is created in Form1 GUI with Public access)
      f.richTextBox1.AppendText("sample text");
   }
}

我尝试通过调用richTextBox1控件和我的代码运行没有错误,但richtextbox没有得到更新。

我要做什么来更新我的状态经常在richTextBox从另一个类功能?

RichTextBox在交叉线程操作中没有更新

你的问题在这里:

public void function3()
{
Form1 f =new Form1();
//Updating the RichTextBox(which is created in Form1 GUI with Public access)
f.richTextBox1.AppendText("sample text");
}

创建Form的另一个实例并对该richTextBox进行更改—而不是初始的。

要做到这一点,您应该使用Invoke方法在其代码隐藏类中设置UI控件的值,如下所示。来自其他类的函数应该为任何in和out值使用形参。

将RichTextBox从Form1传递到function3

    //function inside form1
    public void function2() {
        function3(this.richTextBox1);
    }

然后使用invoke从另一个线程/类更新richTextBox

    //function in another thread
    public void function3(RichTextBox r)
    {
        r.InvokeIfRequired((value) => r.AppendText(value), "asd");
    }