QQ空间互踩 | 代码交流官方QQ群: ①4164128 ②13937921网络证件中心 | 更多QQ空间日志编辑器 | 火星文字
发新话题
打印

[〖编程知识分享〗] C#跨线程访问控件方法

本主题由 花少 于 2009-1-6 09:41 分类

C#跨线程访问控件方法

.net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,推荐的解决方法是采用代理,用代理方法来间接操作不是同一线程创建的控件。

第二种方法是禁止编译器对跨线程访问作检查,可以实现访问,但是出不出错不敢保证Control.CheckForIllegalCrossThreadCalls = false;

代码如下:
引用:
在form声明中加上Control.CheckForIllegalCrossThreadCalls = false;
可以忽略控件得线程交叉引用错误
修改后如下:
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
或使用委托:
引用:
public delegate void MyInvoke(string str);




private void button9_Click(object sender, EventArgs e)
{
//_myInvoke = new MyInvoke(SetText);
//CheckForIllegalCrossThreadCalls = false;
Thread t = new Thread(new ThreadStart(fun));
t.Start();
}

private void fun()
{
//_myInvoke("dddd");
SetText("ddd");
}
private void SetText(string s)
{
if (textBox6.InvokeRequired)
{
MyInvoke _myInvoke = new MyInvoke(SetText);
this.Invoke(_myInvoke, new object[] { s });
}
else
{
this.textBox6.Text = s;
}
}

        

TOP

发新话题