c# Invoke和BeginInvoke 区别分析

2019-12-26 12:25:06王旭

易采站长站为您分析c# Invoke和BeginInvoke 区别分析,需要的朋友可以参考下

:

Control.Invoke 方法 (Delegate)在此控件的基础窗口句柄的线程上指定的委托。

创建

Control.BeginInvoke 方法 (Delegate) :在控件的基础句柄所在线程上指定委托。

(一)Control的Invoke和BeginInvoke

我们要基于以下认识:

(1)Control的Invoke和BeginInvoke与Delegate的Invoke和BeginInvoke是不同的。

(2)Control的Invoke和BeginInvoke的参数为delegate,委托的方法是在Control的线程上执行的,也就是我们平时所说的UI线程。

我们以代码(一)来看(Control的Invoke)

 

 
  1. private delegate void InvokeDelegate();  private void InvokeMethod(){ 
  2. //C代码段  } 
  3. private void butInvoke_Click(object sender, EventArgs e) {  //A代码段....... 
  4. this.Invoke(new InvokeDelegate(InvokeMethod));  //B代码段...... 

你觉得代码的执行顺序是什么呢?记好Control的Invoke和BeginInvoke都执行在主线程即UI线程上

A------>C---------------->B

解释:(1)A在UI线程上执行完后,开始Invoke,Invoke是同步

(2)代码段B并不执行,而是立即在UI线程上执行InvokeMethod方法,即代码段C。

(3)InvokeMethod方法执行完后,代码段C才在UI线程上继续执行。

看看代码(二),Control的BeginInvoke

 

 
  1. private delegate void BeginInvokeDelegate();  private void BeginInvokeMethod(){ 
  2. //C代码段  } 
  3. private void butBeginInvoke_Click(object sender, EventArgs e) {  //A代码段.......