Form1窗体 通过线程发送一个消息到 Form2窗体但是到B窗体接收的时候告诉我:
线程间操作无效: 从不是创建控件“textBox1”的线程访问它。
我如何解决这个线程同步的问题!Form1的代码
Form2 f2;
private void Form1_Load(object sender, EventArgs e)
{
f2 = new Form2();
f2.Show();
}
private void button1_Click(object sender, EventArgs e)
{
new Thread(new ThreadStart(ConnectServer)).Start();
}private void ConnectServer()
{
f2.InputString(this.textBox1.Text.Trim());
}Form2的代码:
public void InputString(string Msg)
{
this.textBox1.Text = Msg; //这里报错!
}请问各位师哥解决这个方法有几种方法!最好能代码明示愚钝菜鸟小妹!
线程间操作无效: 从不是创建控件“textBox1”的线程访问它。
我如何解决这个线程同步的问题!Form1的代码
Form2 f2;
private void Form1_Load(object sender, EventArgs e)
{
f2 = new Form2();
f2.Show();
}
private void button1_Click(object sender, EventArgs e)
{
new Thread(new ThreadStart(ConnectServer)).Start();
}private void ConnectServer()
{
f2.InputString(this.textBox1.Text.Trim());
}Form2的代码:
public void InputString(string Msg)
{
this.textBox1.Text = Msg; //这里报错!
}请问各位师哥解决这个方法有几种方法!最好能代码明示愚钝菜鸟小妹!
发表于:2008-04-18 14:33:32 楼主
Form1窗体 通过线程发送一个消息到 Form2窗体 但是到B窗体接收的时候告诉我:
线程间操作无效: 从不是创建控件“textBox1”的线程访问它。
我如何解决这个线程同步的问题! Form1的代码
Form2 f2;
private void Form1_Load(object sender, EventArgs e)
{
f2 = new Form2();
f2.Show();
}
private void button1_Click(object sender, EventArgs e)
{
new Thread(new ThreadStart(ConnectServer)).Start();
} private void ConnectServer()
{
f2.InputString(this.textBox1.Text.Trim());
} Form2的代码:
public delegate void setText(string Msg);
public setText tt;
public void InputString(string Msg)
{
tt = new setText(SetTextValue);
textBox1.Invoke(tt, new object[] {Msg });
}
public void SetTextValue(string Msg)
{
this.textBox1.Text=Msg;
}
----------------
线程访问控件要用委托的,具体可参见愚翁的BOLG,里面有详细的介绍
textBox1.Invoke(tt, new object[] {s });
和public delegate void setText(string Msg);
这两种方法!这个还是通过线程访问!我想直接在Form2里!直接这样访问!public void InputString(string Msg)
{
this.textBox1.Text = Msg; //这里报错!
} 在Form1里能改进吗?
Form2 f2;
private void button1_Click(object sender, EventArgs e)
{
new Thread(new ThreadStart(ConnectServer)).Start();
}private void ConnectServer()
{
CheckForIllegalCrossThreadCalls = false;
f2.InputString(this.textBox1.Text.Trim());
}
public void InputString(string Msg)
{
this.textBox1.Text = Msg; //返回时Msg能收到消息,但是不能显示在控件上
}private void Form1_Load(object sender, EventArgs e)
{
f2 = new Form2();
f2.Show();
}Form2代码:
Form1 f1;
public void InputString(string Msg)
{
this.textBox1.Text = Msg;
Thread readerthread=new Thread(new ThreadStart(ReadThread));
readerthread.Start();
}private void ReadThread()
{
CheckForIllegalCrossThreadCalls = false;
f1.InputString("发送成功!!!!!!!!!");
}
private void Form2_Load(object sender, EventArgs e)
{
f1 = new Form1();
}this.textBox1.Text = Msg; //返回时Msg能收到消息,但是不能显示在控件上
看完你就知道了