易采站长站为您分析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)
- private delegate void InvokeDelegate(); private void InvokeMethod(){
- //C代码段 }
- private void butInvoke_Click(object sender, EventArgs e) { //A代码段.......
- 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
- private delegate void BeginInvokeDelegate(); private void BeginInvokeMethod(){
- //C代码段 }
- private void butBeginInvoke_Click(object sender, EventArgs e) { //A代码段.......










