博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转载:C# this.invoke()作用 多线程操作UI 理解二
阅读量:5054 次
发布时间:2019-06-12

本文共 1876 字,大约阅读时间需要 6 分钟。

Invoke()的作用是:在应用程序的主线程上执行指定的委托。一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke();

 

//测试的窗体  public class TestForm : Form  {      //创建一个Button对象      private Button button = new Button();      //构造函数      public TestForm()      {             //设置按钮的属性          button.Size = new Size(150, 100);   //大小          button.Click += Button1_Clicked;    //注册事件          button.Text = "点击开始测试";       //设置显示文本          this.Controls.Add(button);          //添加到窗体上          this.Text = "多线程范例";           //设置窗体的标题栏文本      }      //按钮的Click事件响应方法      public void Button1_Clicked(object sender, EventArgs e)      {          //启动一个线程          new Thread(ThreadProc).Start();      }      //线程函数      public void ThreadProc()      {          //this.Invoke就是跨线程访问ui的方法,也是本文的范例          //首先invoke一个匿名委托,将button对象禁用          this.Invoke((EventHandler)delegate          {              button.Enabled = false;          });            //记录一个时间戳,以演示倒计时效果          int tick = Environment.TickCount;          while (Environment.TickCount - tick < 1000)          {              //跨线程调用更新窗体上控件的属性,这里是更新这个按钮对象的Text属性              this.Invoke((EventHandler)delegate              {                  button.Text = (1000 - Environment.TickCount + tick).ToString() + "微秒后开始更新";              });              //做一个延迟,避免太快了,视觉效果不好。              Thread.Sleep(100);          }          //演示,10次数字递增显示          for (int i = 0; i < 10; i++)          {              this.Invoke((EventHandler)delegate              {                  button.Text = i.ToString();              });              Thread.Sleep(200);          }          //虽然不是循环内,请不要忘记,你的调用依然在辅助线程中,所以,还是需要invoke的。          //还原状态,设置按钮的文本为初始状态,设置按钮可用。          this.Invoke((EventHandler)delegate          {              button.Text = "点击开始测试";              button.Enabled = true;          });      }  }

 

转载于:https://www.cnblogs.com/candyzhmm/p/5729204.html

你可能感兴趣的文章
第三节
查看>>
PHP结合MYSQL记录结果分页呈现(比较实用)
查看>>
Mysql支持的数据类型
查看>>
openSuse beginner
查看>>
Codeforces 620E(线段树+dfs序+状态压缩)
查看>>
Windows7中双击py文件运行程序
查看>>
Market entry case
查看>>
bzoj1230 开关灯 线段树
查看>>
LinearLayout
查看>>
学习python:day1
查看>>
css3动画属性
查看>>
第九次团队作业-测试报告与用户使用手册
查看>>
Equal Sides Of An Array
查看>>
CentOS笔记-用户和用户组管理
查看>>
Mongodb 基本命令
查看>>
Qt中QTableView中加入Check列实现
查看>>
“富豪相亲大会”究竟迷失了什么?
查看>>
控制文件的备份与恢复
查看>>
返回代码hdu 2054 A==B?
查看>>
Flink独立集群1
查看>>