1. 程式人生 > >C# 中的invoke和begininvoke

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,  和上面同理,前者為同步,後者為非同步。

相關推薦

C#Invoke BeginInvoke的涵義區別

參考以下程式碼: public delegate void treeinvoke(); privatevoidUpdateTreeView() {          MessageBox.Show(System.Threading.Thread.CurrentThread.Name); } privat

C# invokebegininvoke

原文地址:http://www.cnblogs.com/Z-King/archive/2011/11/03/2234337.html   1. control中的invoke、begininvoke。   2. delegrate中的invoke、begininvoke

C# InvokeBeginInvoke(1)

 近日,被Control的Invoke和BeginInvoke搞的頭大,就查了些相關的資料,整理如下。感謝這篇文章對我的理解Invoke和BeginInvoke的真正含義 。 (一)Control的Invoke和BeginInvoke 我們要基於以下認識: (1)Control的

c# InvokeBeginInvoke 區別

Control.Invoke 方法 (Delegate) :在擁有此控制元件的基礎視窗控制代碼的執行緒上執行指定的委託。 Control.BeginInvoke 方法 (Delegate) :在建立控制元件的基礎控制代碼所線上程上非同步執行指定委託。 (一)Control的

C# Control的InvokeBeginInvoke

之前在專案中遇到了UI介面更新出錯的問題,後來在網上找了很多資料,終於解決,先將資料整理如下: 為什麼需要Control.Invoke和Control.BeginInvoke?? 如果從另外一個執行緒操作 windows窗體上的控制元件,就會和主執行緒產生競爭,造成不可

C# InvokeBeginInvoke理解

       在Invoke或者BeginInvoke的使用中無一例外地使用了委託Delegate,Invoke或者BeginInvoke方法都需要一個委託物件作為引數。委託類似於回撥函式的地址,因此呼叫者通過這兩個方法就可以把需要呼叫的函式地址封送給介面執行緒。這些方法裡面

C#&&&,|||區別

.com blank img cnblogs png ref bsp 筆記 區別 當兩者都為邏輯運算符時。 其實沒什麽差別。 &&和||當已經確定結果時,不會對第二個操作數求值。也不知道什麽情況會用到這個差別。做個筆記好了。 http://blog.cs

C++typenameclass的區別

type .get true 能夠 class .... ray pla 依賴 在c++Template中很多地方都用到了typename與class這兩個關鍵字,而且好像可以替換,是不是這兩個關鍵字完全一樣呢? 相信學習C++的人對class這個關鍵字都非常明白,clas

C++數字字符串的轉換

oat 不能 ring1 相關 輸出 displays tof spl 進制轉換 1、字符串數字之間的轉換(1)string --> char * string str("OK"); char * p = str.c_str();(2)char * -->

C++static_castdynamic_cast強制類型轉換

tro 父類 虛函數表 找到 virt 內部 pub 判斷 () 在C++標準中,提供了關於類型層次轉換中的兩個關鍵字static_cast和dynamic_cast。 一、static_cast關鍵字(編譯時類型檢查) 用法:static_cast < type-i

C++的###運算符

合並操作 col 否則 未定義 info merge eight 標識符 轉換 #和##運算符 #:構串操作符 構串操作符#只能修飾帶參數的宏的形參,它將實參的字符序列(而不是實參代表的值)轉換成字符串常量 #define STRING(x) #x#x#x #defin

c#ClassStruct使用與性能的區別

回收 數據結構 com 垃圾回收 父類 改變 med .cn 指針 在Unity中很多已經定義為結構體的數據結構 Vector2, Vector3 和 Vector4 Rect Color和Color32 Bounds Touch 1.Class為引用類型,Str

C#MonitorLock以及區別

能夠 program tor 試圖 tro 指定 object span () 原文地址:http://www.cnblogs.com/chengxingliang/p/3150731.html   Monitor對象   1.Monitor.Enter(object)方法

C#Convertparse的區別

處理 捕獲 用戶 整數 request 存在 query 轉換 中間 Convert.ToInt32()與int.Parse()的區別(1)這兩個方法的最大不同是它們對null值的處理方法: Convert.ToInt32(null)會返回0而不會產生任何異常,但int.P

C#&&&的區別

poi log sha 與操作 位運算 orm 第一個 pre 繼續 SiKi老師讓我們自行查一下&和&&的區別,So... 1)&和&&都可以用作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都為tru

C/C++nearfar的區別

語言 補充 detail net 計算機體系結構 偏移 單元 體系結構 all C/C++中near和far的區別 關鍵字near和far受目標計算機體系結構的影響。目前編程中使用不多。 near關鍵字創建一個指向可尋址內存低端部分的目標指針。這些

C#virtualabstract的區別

tool 保留 到你 variable var 入口 printf static write 解讀一 c# 中 Abstract和Virtual比較容易混淆,都與繼承有關,並且涉及override的使用。下面討論一下二者的區別: 一、Virtual方法(虛方法)   vir

C#GetPost請求的同步及異步方法

iter epo charset result string pty streambuf div httpget 在C#中發起Http請求一般使用HttpWebRequest這個類,下文將使用這個HttpWebRequest對象來對Get和Post的同步及異步請求進行封裝:

C#AbstractVirtual的區別

保留 一個 strac 虛擬 ati AI 靜態方法 void ride c# 中 Abstract和Virtual比較容易混淆,都與繼承有關,並且涉及override的使用。下面討論一下二者的區別: 一、Virtual方法(虛方法)   virtual 關鍵字用於在基

C++const#define的利弊探索

C++學習 C++學習總結 C++靈感 const和#define的利弊,從而推導const的意義; const和#define都有類似的功能,那就是定義一個“常量”; 想用來替換#define定義常量這種方式。這是一種定義宏的方式。因為宏替換定義常量有一定的缺陷:不做類型檢查,沒有作用域限制(這