C# 跨线程操作控件(简洁)

 
                                        C# 跨线程操作控件
.net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生。解决此问题的方法有两个:
第一种方法是禁止编译器对跨线程访问作检查,可以实现访问,但是出不出错不敢保证。
在form声明中加上Control.CheckForIllegalCrossThreadCalls = false;
可以忽略控件得线程交叉引用错误
如下:
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}

第二种:推荐的解决方法是采用用委托,用委托方法来间接操作不是同一线程创建的控件。如下:

//定义委托

public delegate void MyInvoke(string str);

//按钮事件 ,启动新线程

private void button1_Click(object sender, EventArgs e)

{

Thread t = new Thread(new ThreadStart(fun));

t.Start();

}

private void fun()

{

SetText("ddd");

}

private void SetText(string s)

{

if (textBox1.InvokeRequired)

{

MyInvoke _myInvoke = new MyInvoke(SetText);

this.Invoke(_myInvoke, new object[] { s }); //数组参数一定是     object [] 型的

}

else

{

this.textBox6.Text = s;

}

}

上一篇:TODO:小程序的使用体验


下一篇:『Candies 差分约束系统』