C#——跨线程,操作控件
这个问题遇见不止一次,在做通信的时候遇见过。。做卡车调度模拟的时候也遇见过。。。咋解决啊…………
错误请看代码:
private void change()
{
this.label1.Text = "已发生变化";
}
private void button1_Click(object sender, EventArgs e) //按钮事件
{
Thread cha = new Thread(new ThreadStart(change));
cha.Start();
}
解决方法:
private void change()
{
this.label1.Text = "已发生变化";
}
private void threadchange() //通过委托处理,MSDN上又很详细用法的说明
{
MethodInvoker In = new MethodInvoker(change);
this.BeginInvoke(In);
}
private void button1_Click(object sender, EventArgs e)
{
Thread cha = new Thread(new ThreadStart(threadchange));
cha.Start();
}
程序测试成功
上述方法虽然不会弹出跨线程调用控件的错误提示,但是在会导致我自己的程序卡死…………唉!!!
下面还有一种方法,测试成功;

#region 在创建的线程之外对textbox赋值 delegate void SetTextCallback(object sender); //, EventArgs e); void SetText(object sender)//, EventArgs e) { string text; text = ServerMessage.ReceiveMsg; if (this.textBoxContent.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); } else { if(orn%2==0) this.textBoxContent.Text += text+"\r\n"; orn++; } } #endregion

ServerMessage.msgCome += new msgDialogue.Umsg(SetText);
上面这句话是添加事件。。。
这样就能解决跨线程调用控件的问题了。可能会遇见这个函数重复执行两次,所以加了一个判断奇偶的语句。