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
从另一个类功能?
你的问题在这里:
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");
}