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

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

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

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

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

以下代碼是一個簡單的替代方案,同樣可以實現(xiàn)事件的動態(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");

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

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

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

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

    WinForm項目開發(fā)中Excel用法實例解析

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

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

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

    C#計算兩個文件的相對目錄算法的實例代碼

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

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

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

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

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

    利用WPF窗口程序設(shè)計簡單計算器

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

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

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

    詳解C#實例化對象的三種方式及性能對比

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

    钟山县| 南郑县| 大港区| 鄱阳县| 东城区| 衡南县| 大洼县| 德格县| 永定县| 玉龙| 遂川县| 甘肃省| 嘉荫县| 宜阳县| 万盛区| 德钦县| 罗江县| 绿春县| 昔阳县| 藁城市| 耿马| 阿鲁科尔沁旗| 平山县| 沛县| 长子县| 陈巴尔虎旗| 芒康县| 沂南县| 清水河县| 平阳县| 三门峡市| 清丰县| 衢州市| 广水市| 莱州市| 孝义市| 奎屯市| 湟源县| 安龙县| 石楼县| 苍溪县|