c#线程间操作UI-Invoke和BeginInvoke

利用Invoke和或BeginInvoke实现线程间操作UI的简单例子。

 1  /*
 2          窗体包含一个button和一个richtextbox控件
 3          * 注:必须在子线程中执行Invoke和或BeginInvoke
 4          */
 5         /// <summary>
 6         /// 线程委托
 7         /// </summary>
 8         public delegate void g_Delegate1();
 9         /// <summary>
10         /// 线程调用BeginInvoke修改UI委托
11         /// </summary>
12         public delegate void g_Delegate2();
13         /// <summary>
14         /// 线程函数
15         /// </summary>
16         public void UpdateTxt1()
17         {
18             g_Delegate2 pD2 = new g_Delegate2(UpdateTxt2);//在新的线程中建立委托,指向UpdateTxt2函数
19             while (true)
20             {
21                 this.Invoke(pD2);//子线程执行委托pd2即函数UpdateTxt2,达到线程间操作UI的目的
22                 //this.BeginInvoke(pD2);
23                 Thread.Sleep(1000);
24             }
25         }
26         /// <summary>
27         /// 修改UI函数
28         /// </summary>
29         public void UpdateTxt2()
30         {
31             Random pRandom = new Random();
32             int r = pRandom.Next(255);
33             int g = pRandom.Next(255);
34             int b = pRandom.Next(255);
35             richTextBox1.Text=(string.Format("颜色组合:
红:{0}
绿:{1}
蓝:{2}
", r, g, b));
36             this.BackColor = Color.FromArgb(r, g, b);
37         }
38         /// <summary>
39         /// 按钮事件
40         /// </summary>
41         /// <param name="sender"></param>
42         /// <param name="e"></param>
43         private void button1_Click(object sender, EventArgs e)
44         {
45             g_Delegate1 pD1 = new g_Delegate1(UpdateTxt1);//线程委托,指向UpdateTxt1
46             Thread pThread = new Thread(new ThreadStart(pD1));//新建线程,指向委托pD1即函数UpdateTxt1
47             pThread.Start();//开始新线程
48         }

效果图如下:

原文地址:https://www.cnblogs.com/dullfish/p/6092432.html