[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

相關文章
相關標籤/搜索