从另一个线程写入TextBox?
我无法弄清楚如何使C#Windows Form应用程序从线程写入文本框。例如在Program.cs中,我们具有绘制以下形式的标准main():
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
然后在Form1.cs中:
public Form1()
{
InitializeComponent();
new Thread(SampleFunction).Start();
}
public static void SampleFunction()
{
while(true)
WindowsFormsApplication1.Form1.ActiveForm.Text += "hi. ";
}
我要彻底解决这个问题吗?
更新
这是bendewey提供的工作代码示例:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
new Thread(SampleFunction).Start();
}
public void AppendTextBox(string value)
{
if (InvokeRequired)
{
this.Invoke(new Action<string>(AppendTextBox), new object[] {value});
return;
}
textBox1.Text += value;
}
void SampleFunction()
{
// Gets executed on a seperate thread and
// doesn't block the UI while sleeping
for(int i = 0; i<5; i++)
{
AppendTextBox("hi. ");
Thread.Sleep(1000);
}
}
}
-
在MainForm上创建一个函数来设置文本框,以检查InvokeRequired
public void AppendTextBox(string value) { if (InvokeRequired) { this.Invoke(new Action<string>(AppendTextBox), new object[] {value}); return; } ActiveForm.Text += value; }
尽管您不能使用静态方法进行调用。
WindowsFormsApplication1.Form1.AppendTextBox("hi. ");
您必须在某处对Form1进行静态引用,但这并不是真正推荐或必需的方法,您是否可以仅使SampleFunction不是静态的,如果可以,则可以调用
AppendTextBox("hi. ");
它将附加在不同的线程上,并在需要时使用Invoke调用将其编组到UI。
完整样本
public partial class Form1 : Form { public Form1() { InitializeComponent(); new Thread(SampleFunction).Start(); } public void AppendTextBox(string value) { if (InvokeRequired) { this.Invoke(new Action<string>(AppendTextBox), new object[] {value}); return; } textBox1.Text += value; } void SampleFunction() { // Gets executed on a seperate thread and // doesn't block the UI while sleeping for(int i = 0; i<5; i++) { AppendTextBox("hi. "); Thread.Sleep(1000); } } }
-
从另一个线程更新JLabel
2021-01-29 关注 0 浏览94 1答案
-
如何从另一个类中运行的另一个线程更新UI
2021-02-02 关注 0 浏览111 1答案
-
如何从另一个线程更新GUI?
2021-02-02 关注 0 浏览124 1答案
-
从另一个线程更新SWT对象
2021-01-29 关注 0 浏览121 1答案
-
从另一个线程更改kivy属性
2021-01-29 关注 0 浏览100 1答案
-
如何从另一个线程更新 GUI?
2022-03-22 关注 0 浏览85 1答案
-
从另一个线程在主线程中运行代码
2022-04-11 关注 0 浏览31 1答案
-
javafx,从另一个线程更新ui
2021-01-31 关注 0 浏览124 1答案
-
PyQt-从另一个线程修改GUI
2021-01-29 关注 0 浏览95 1答案
-
如何从另一个线程调用UI方法
2021-02-02 关注 0 浏览135 1答案