WinForm中多线程问题?

来源:互联网 发布:c语言do while语句 编辑:程序博客网 时间:2024/05/07 14:57

问题描述:

界面中有一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)); }

两种方法亲测均可行,视情况选择即可。


0 0
原创粉丝点击