最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中事件的動(dòng)態(tài)調(diào)用實(shí)現(xiàn)方法

 更新時(shí)間:2014年09月06日 09:49:33   投稿:shichen2014  
這篇文章主要介紹了C#中事件的動(dòng)態(tài)調(diào)用實(shí)現(xiàn)方法,對(duì)比傳統(tǒng)思路優(yōu)劣給出了一個(gè)新的解決方案,需要的朋友可以參考下

本文實(shí)例講述了C#動(dòng)態(tài)調(diào)用事件的方法。一般來(lái)說(shuō),傳統(tǒng)的思路是,通過(guò)Reflection.EventInfo獲得事件的信息,然后使用GetRaiseMethod方法獲得事件被觸發(fā)后調(diào)用的方法,再使用MethodInfo.Invoke來(lái)調(diào)用以實(shí)現(xiàn)事件的動(dòng)態(tài)調(diào)用。

但是很不幸的,Reflection.EventInfo.GetRaiseMethod方法始終返回null。這是因?yàn)?,C#編譯器在編譯并處理由event關(guān)鍵字定義的事件時(shí),根本不會(huì)去產(chǎn)生有關(guān)RaiseMethod的元數(shù)據(jù)信息,因此GetRaiseMethod根本無(wú)法獲得事件觸發(fā)后的處理方法。Thottam R. Sriram 在其Using SetRaiseMethod and GetRaiseMethod and invoking the method dynamically 一文中簡(jiǎn)要介紹了這個(gè)問(wèn)題,并通過(guò)Reflection.Emit相關(guān)的方法來(lái)手動(dòng)生成RaiseMethod,最后使用常規(guī)的GetRaiseMethod來(lái)實(shí)現(xiàn)事件觸發(fā)后的方法調(diào)用。這種做法比較繁雜。

以下代碼是一個(gè)簡(jiǎn)單的替代方案,同樣可以實(shí)現(xiàn)事件的動(dòng)態(tài)調(diào)用。具體代碼如下:

public event EventHandler<EventArgs> MyEventToBeFired;  
public void FireEvent(Guid instanceId, string handler)    
{     
  // Note: this is being fired from a method with in the same class that defined the event (i.e. "this").      
  EventArgs e = new EventArgs(instanceId);  
  MulticastDelegate eventDelagate = (MulticastDelegate)this 
   .GetType()  
   .GetField(handler, BindingFlags.Instance | BindingFlags.NonPublic)
   .GetValue(this);  
  Delegate[] delegates = eventDelagate.GetInvocationList();  
  foreach (Delegate dlg in delegates)  
  {  
    dlg.Method.Invoke( dlg.Target, new object[] { this, e } );  
  }  
}  
FireEvent(new Guid(), "MyEventToBeFired");

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助

  • 詳解C#中 Thread,Task,Async/Await,IAsyncResult的那些事兒

    詳解C#中 Thread,Task,Async/Await,IAsyncResult的那些事兒

    本文主要介紹了C#中 Thread,Task,Async/Await,IAsyncResult的相關(guān)知識(shí)。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • WinForm項(xiàng)目開(kāi)發(fā)中Excel用法實(shí)例解析

    WinForm項(xiàng)目開(kāi)發(fā)中Excel用法實(shí)例解析

    這篇文章主要介紹了WinForm項(xiàng)目開(kāi)發(fā)中Excel用法,非常實(shí)用,需要的朋友可以參考下
    2014-08-08
  • C# 9.0新特性——只初始化設(shè)置器

    C# 9.0新特性——只初始化設(shè)置器

    這篇文章主要介紹了C# 9.0新特性——只初始化設(shè)置器的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-11-11
  • C#計(jì)算兩個(gè)文件的相對(duì)目錄算法的實(shí)例代碼

    C#計(jì)算兩個(gè)文件的相對(duì)目錄算法的實(shí)例代碼

    現(xiàn)在已知兩個(gè)文件相對(duì)于網(wǎng)站根目錄的路徑,如何計(jì)算相對(duì)路徑呢,有需要的朋友可以參考一下
    2013-09-09
  • C#多線程數(shù)組模擬socket

    C#多線程數(shù)組模擬socket

    這篇文章主要為大家詳細(xì)介紹了C#多線程數(shù)組模擬socket的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C# Aspose.Words 刪除word中的圖片操作

    C# Aspose.Words 刪除word中的圖片操作

    這篇文章主要介紹了C# Aspose.Words 刪除word中的圖片操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • 利用WPF窗口程序設(shè)計(jì)簡(jiǎn)單計(jì)算器

    利用WPF窗口程序設(shè)計(jì)簡(jiǎn)單計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了利用WPF窗口程序設(shè)計(jì)簡(jiǎn)單計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 在winform中嵌入第三方軟件窗體的實(shí)踐分享

    在winform中嵌入第三方軟件窗體的實(shí)踐分享

    這篇文章主要介紹了在winform中如何嵌入第三方軟件窗體的實(shí)踐分享,文中通過(guò)代碼示例和圖文給大家介紹的非常詳細(xì),具有一定參考價(jià)值,需要的朋友可以參考下
    2024-03-03
  • 詳解C#實(shí)例化對(duì)象的三種方式及性能對(duì)比

    詳解C#實(shí)例化對(duì)象的三種方式及性能對(duì)比

    這篇文章主要介紹了C#實(shí)例化對(duì)象的三種方式及性能對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 最新評(píng)論

    大埔区| 曲松县| 邢台市| 四会市| 营山县| 新乐市| 广元市| 乐平市| 金平| 徐州市| 白玉县| 霸州市| 剑阁县| 永昌县| 盐源县| 眉山市| 互助| 中江县| 平舆县| 吉林省| 三明市| 河北区| 衡阳市| 桐乡市| 长春市| 邹城市| 东乌| 益阳市| 潜江市| 松江区| 通道| 信阳市| 明星| 阳高县| 刚察县| 古交市| 紫云| 普兰店市| 油尖旺区| 浠水县| 南皮县|