问题描述:
界面中有一TextBox控件,名为txtName,需要修改其Enabled属性值,用到了多线程+委托,但是程序报错:“线程间操作无效,不能从创建此线程之外的线程访问”,具体代码如下:
private delegate void DelegateMethod();
private void SetStatus()
{
this.txtName.Enabled = true; //报错,从不是创建此控件的线程访问。
}
public voidbtnStart_Click(object sender,EventArgs e)
{
DelegateMethod dm = delegate()
{
SetStatus();
};
if(!IsHandleCreated)
{
this.txtName.Invoeke(dm);
}
Thread thread = new Thread(new ThreadStart(dm)):
thread.Start();
}
试过多种解决方法,依然未能解决问题,于是在CSDN求助,得到了解决方案,具体帖子详见:
http://bbs.csdn.net/topics/390854438?page=1#post-397941216
解决方法:
方法一:
void dm()
{
this.Invoke(new Action(delegate() {
this.txtName.Enabled = true;
}));
}
Thread thread = new Thread(new ThreadStart(dm)):
thread.Start();
方法二:
private void SetStatus()
{
this.txtName.Invoke(new MethodInvoker(() => this.txtName.Enabled = true));
}
两种方法亲测均可行,视情况选择即可。