c# 线程操作控件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wuguanghao/article/details/77074704

在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应。 同时我们又需要在工作线程中更新UI界面上的控件,

1、线程间操作控件无效
跨线程操作故障

2、使用delegate和invoke方法来从其他线程调用控件

   //声明一个委托的类型
        public delegate void ShowMessageDelegate();
        //声明一个委托的对象
        public ShowMessageDelegate SMD;
 private void button1_Click(object sender, EventArgs e)
        {
            Thread thread3 = new Thread(showMessage);
            thread3.Start();
        }
        private void showMessage()
        {
            //判断这个控件是否有被主线程访问
          if(this.label1.InvokeRequired)
          {
                SMD = new ShowMessageDelegate(showMessage);
              //this这里指窗体,在这里调用窗体的invoke方法,
                this.Invoke(SMD);//这里也可以直接用this.BeginInvoke(SMD);BeginInvoke方法是异步的, 它会另起一个线程去完成工作线程
          }
          else
          {
                label1.Text = "sadfafdasda";
          }
        }

3、还有一种方法通过后台程序控制来显示,这种方法还在逐步完善中。

猜你喜欢

转载自blog.csdn.net/wuguanghao/article/details/77074704