.NET并行计算和并发3.2-多线程调用Invoke

时间:2022-01-13 21:23:38

以下这个例子是用一个后台线程执行计算逻辑,这样不影响前台界面操作,也就是说

可以在前台UI界面执行其他操作。

重点是新线程中,调用了一个委托方法,这个方法是需要填充数据到前台控件,因为

前台控件是在原来的线程中创建的,所以在新线程中需要调用Invoke方法,实时的展示

后台逻辑的计算进度。

代码如下:

  1  public partial class Form1 : Form
2 {
3 private delegate void mydelegate(long j);
4 private mydelegate dele;
5 public Form1()
6 {
7 InitializeComponent();
8 dele += new mydelegate(delegateMethod);
9 }
10
11 private void delegateMethod(long j)
12 {
13 this.textBox1.Text = j.ToString();
14 }
15
16 private void button1_Click(object sender, EventArgs e)
17 {
18 Thread thd = new Thread(threadMethod);
19 thd.Start();
20 }
21
22 private void threadMethod()
23 {
24 long j = 0;
25 for (int i = 0; i < 1e10; i++)
26 {
27 j++;
28 if (j%1000 == 0)
29 {
30 //调用Invoke方法后,会在原来的创建textbox1的线程中执行delegateMethod方法。
31 this.Invoke(dele,j);
32 }
33 }
34 }
35 }
36

.NET并行计算和并发3.2-多线程调用Invoke