winform进程间操作UI控件

一,问题说明。

当在主线程之外新建一个线程之后,我们想通过新建线程修改主界面控件的属性等操作,此时,Windows会报错,提示进程间操作UI无效。

二,解决方法。

1,并不高明的做法,有一定作用,并不推荐。

public Form1()
  {            
       InitializeComponent();
    CheckForIllegalCrossThreadCalls = false;//这种设置相当于让vs同意这样进程间操作
  }

2,利用委托来进行操作。相当于在新建进程和主进程间出现了一个第三方,这个第三方把新建进程的需求传递给主进程,然后主进程执行。

//无参数的方法
private
void button1_Click(object sender, EventArgs e)//按钮事件中新建线程 { ThreadStart threadstart = new ThreadStart(dosomething); Thread mythread = new Thread(threadstart); mythread.Start(); } delegate void mydelegate(); //委托方法 public void dosomething() //新线程中需要做的事情 { if (this.InvokeRequired) { this.Invoke(new mydelegate(dosome)); } else { } } public void dosome()//实际操作UI的方法,通过委托执行 { button1.Text = "Hellow C#"; }

3,考虑有参数的方法情况

private void button1_Click(object sender, EventArgs e)
        {
            Thread mythread = new Thread(new ParameterizedThreadStart(dosomething));//新建线程,关联该线程将要执行的方法
            mythread.Start("Hellow C#");
        }
        delegate void mydelegate(string str);
          public void dosomething(object obj) 
        {
            if (this.InvokeRequired)
            { 
             this.Invoke(new mydelegate(dosome),obj);
            }
            else 
           {            
           }          
        }
          public void dosome(string  str)
          {
              button1.Text = str;
          }
    }

 

转载于:https://www.cnblogs.com/lilixiang-go/p/4660051.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值