What's dream?

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

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

可以在前台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 
View Code

1

posted on 2017-08-18 13:10  kiss88  阅读(219)  评论(0编辑  收藏  举报