请问如何在线程中控制form?
private void button1_Click(object sender, EventArgs e){
Thread th = new Thread(new ThreadStart(YourThread));
th.Start();
}
void YourThread()
{
textBox1.text = "test";
}
这段代码中textBox1.text 不能控制text的值
请问有什么方法改变textBox1.text的值呢 --------------------编程问答-------------------- 线程间通信? --------------------编程问答-------------------- 使用Invoke
参考MSDN的Control.InvokeRequired属性
--------------------编程问答-------------------- delegate void SetTextCallback(string text);
//设置信息显示
private void SetText(string text)
{
if (this.richTextBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.richTextBox1.AppendText(text);
this.richTextBox1.ScrollToCaret();
}
} --------------------编程问答-------------------- 楼上正解
有两种办法解决:
一个是使用BackgroundWorker,这也是一个线程,只不过帮你封装好了,用起来简单。
楼主可以参考此文:
http://www.cnblogs.com/walkingmu/archive/2008/05/02/1179501.html
还有一个是像楼上那样做
可以参考此文:
http://www.cnblogs.com/imissherso/archive/2007/01/28/632480.html --------------------编程问答-------------------- 简单点: This.CheckForIllegalCrossThreadCalls = false;
要不就去用delegate --------------------编程问答-------------------- 使用线程安全的委托
control.Invoke
--------------------编程问答-------------------- --------------------编程问答-------------------- 加上CheckForIllegalCrossThreadCalls = false;
否则会调试出异常,跨线程调用控件要用上这一句,但也不是安全的,用委托吧
补充:.NET技术 , C#