C# 从另一个类的后台线程更新GUI控件
我正在创建一个基于windows的应用程序,从服务器下载数据。 我正在使用在不同类上创建的后台线程来执行这些下载操作。我想在rich textbox(即主线程)上连续显示下载状态。但我无法执行此操作,获取的跨线程操作无效。 请帮我解决这个问题 Form1.cs上的方法C# 从另一个类的后台线程更新GUI控件,c#,C#,我正在创建一个基于windows的应用程序,从服务器下载数据。 我正在使用在不同类上创建的后台线程来执行这些下载操作。我想在rich textbox(即主线程)上连续显示下载状态。但我无法执行此操作,获取的跨线程操作无效。 请帮我解决这个问题 Form1.cs上的方法 public void UpdateRichText(string Text) { SetRichText(Text); } public delegate void SetRi
public void UpdateRichText(string Text)
{
SetRichText(Text);
}
public delegate void SetRichTextTextDelegate(string text);
public void SetRichText(object number)
{
if (InvokeRequired)
{
this.BeginInvoke(new SetRichTextTextDelegate(SetRichText),text);
return;
}
richTextBox1.Text += number.ToString() + "\n";
}
private void button3_Click_1(object sender, EventArgs e)
{
demo d = new demo();
d.display();
}
demo.cs上的方法
Form1 f = new Form1();
public void display()
{
Thread t = new Thread(new ThreadStart(call));
t.Start();
}
public void call()
{
//when i call this method every time if(InvokeRequired) is false.
f.UpdateRichText("Called from Thread");
}
尝试将支票更改为:
if (richTextBox1.InvokeRequired)
{
richTextBox1.BeginInvoke(new SetRichTextTextDelegate(SetRichText),text);
尝试使用以下命令
if (richTextBox1.InvokeRequired)
{
richTextBox1.Invoke(new Action(delegate { richTextBox1.Text += number.ToString() + "\n"; richTextBox1.ScrollToCaret(); }));
}
else
{
richTextBox1.Text += number.ToString() + "\n";
richTextBox1.ScrollToCaret();
}
richTextBox1.Text+=number.ToString()+“\n”;可以按如下方式进行更改:
rtbEvents.AppendText(Environment.NewLine+number.ToString())如上代码所述,我创建了另一个执行所有下载操作的类。在这个类中,我创建了一个在后台执行所有下载操作的线程。现在要更新GUI,我使用form object ex b.display调用了一个方法,该方法在内部调用SetRichText来更新richtext。这是调用表单..?每次使用此方法时,invokererequired都是false。