[C#]this.Invoke和this.BeginInvoke的区别

private void button1_Click(object sender, EventArgs e)       
     {  
      this.textBox1.Text = "1";  
  
         this.Invoke(new EventHandler(delegate       {  
            this.textBox1.Text += "2";  
         }));  
  
         this.textBox1.Text += "3";  
      }  

结果为:123异步

private void button1_Click(object sender, EventArgs e)       
     {  
      this.textBox1.Text = "1";  
  
         this.BeginInvoke(new EventHandler(delegate       {  
            this.textBox1.Text += "2";  
         }));  
  
         this.textBox1.Text += "3";  
      }  

结果为132this

 

结论:一、Invoke会阻止当前主线程的运行;BeginInvoke不会阻止当前主线程的运行,而是等当前主线程作完事情以后再执行BeginInvoke中的代码内容。spa

         二、这2个方法都是由主线程运行的,并非异步执行,若是代码耗时过长,一样会形成界面卡死线程

 

Invoke阻止的是工做线程,至关于阻塞式(非建立控件线程或主线程),BeginInvoke是不等待主线程完成变马上返回执行下面操做,至关于异步式。
这里的阻塞或异步是相对于工做线程,而非主线程。
它阻塞或异步的是调用Invoke或BeginInvoke的线程。code