C# 跨线程操作问题
我现在写了一个c#的winform程序,后台有一个线程在监听局域网中的信息,收到信息后要在主窗体中动态创建一个自定义组件,但是建了组件之后我点击组件进行操作就出错,因为不是主线程创建的组件,所以不能操作。。。求大神指导 C#跨线程操作? C#??线程间通信
[解决办法]
用Control.Invoke,把创建界面的代码用委托写好了让UI线程调用。
[解决办法]
我这有个例子,希望对你有帮助
//首先声明一个委托
delegate void ShowMethod(object o);
ShowMethod s;
public Form1()
{
s=new ShowMethod(OperateCom);
//声明新的线程并调用方法
Thread newThread = new Thread(ThreadOperate);
newThread.Start();
}
private void ThreadOperate()
{
this.Invoke(s, new object[] { "操作" });
}
private void OperateCom(object o)
{
Button btn1 = new Button();
btn1.Text = o.ToString();
btn1.Name = "btnOperate";
btn1.Click+=new EventHandler(btn1_Click);
this.Controls.Add(btn1);
}
private void btn1_Click(object sender, EventArgs e)
{
MessageBox.Show("谢谢");
}
[解决办法]
你在定义委托处理的方法里增加组件就可以了。
那就是主线程里添加的。
[解决办法]
两种方法 :
一种是用委托,这个上面的也说了
还有一种是在监听线程里的开头加这一句 CheckForIllegalCrossThreadCalls = false;
这个方法不安全,不如委托,不过也可以解决问题