C# 中的invoke和begininvoke


原文地址:http://www.cnblogs.com/Z-King/archive/2011/11/03/2234337.html


  1. control中的invoke、begininvoke。

  2. delegrate中的invoke、begininvoke。 (這是什么??)

  這兩種情況是不同的,我們這里要講的是第1種。下面我們在來說下.NET中對invoke和begininvoke的官方定義。

  control.invoke(參數delegate)方法:在擁有此控件的基礎窗口句柄的線程上執行指定的委托。

  control.begininvoke(參數delegate)方法:在創建控件的基礎句柄所在線程上異步執行指定委托。

  根據這兩個概念我們大致理解invoke表是同步、begininvoke表示異步。但是如何來進行同步和異步呢


其實invoke和begininvoke所提交的委托方法都是在主線程中執行的,其實根據我invoke和begininvoke的定義我們要在子線程中來看這個問題,在invoke例子中我們會發現invoke所提交的委托方法執行完成后,才能繼續執行DDD;在begininvoke例子中我們會發現begininvoke所提交的委托方法后,子線程講繼續執行DDD,不需要等待委托方法的完成。 那么現在我們在回想下invoke(同步)和begininvoke(異步)的概念,其實它們所說的意思是相對於子線程而言的,其實對於控件的調用總是由主線程來執行的。我們很多人搞不清這個同步和異步,主要還是因為我們把參照物選錯了。其實有時候光看概念是很容易理解錯誤的。


WPF中則是UI控件會有一個dispatcher對象,可以使用this.dispatcher.invoke或者this.dispatcher.Begininvoke,  和上面同理,前者為同步,后者為異步。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com