C 中事件的動態呼叫

2022-01-20 18:00:55 字數 825 閱讀 7080

今天遇到乙個問題,就是希望能夠動態呼叫事件。傳統的思路是,通過reflection.eventinfo獲得事件的資訊,然後使用getraisemethod方法獲得事件被觸發後呼叫的方法,再使用methodinfo.invoke來呼叫以實現事件的動態呼叫。

很不幸,reflection.eventinfo.getraisemethod方法始終返回null。這是因為,c#編譯器在編譯並處理由event關鍵字定義的事件時,根本不會去產生有關raisemethod的元資料資訊,因此getraisemethod根本無法獲得事件觸發後的處理方法。thottam r. sriram 在其using setraisemethod and getraisemethod and invoking the method dynamically 一文中簡要介紹了這個問題,並通過reflection.emit相關的方法來手動生成raisemethod,最後使用常規的getraisemethod來實現事件觸發後的方法呼叫。這種做法比較繁雜。以下**是乙個簡單的替代方案,同樣可以實現事件的動態呼叫:

view plaincopy to clipboardprint?

public

event

eventhandlermyeventtobefired;   

public

void

fireevent(guid instanceid, 

string

handler)       

);   

}   

}   

fireevent(

newguid(), 

"myeventtobefired"

);   

在C 中動態呼叫WebService

using system using system.io using system.net using system.reflection using system.codedom using system.codedom.compiler using microsoft.csharp using ...

python中呼叫C 寫的動態庫

一 環境 windows xp python3.2 1.dll對應的原始檔 m.cpp include extern c declspec dllexport void print sum unsigned long ulnum 2.python源程式 coding gbk from ctypes ...

C 中動態訂閱控制項中任意事件的方法

這個題目想了半天,不太好用一句話描述。這樣,舉個簡單的應用場景 在用windows forms製作嚮導程式的時候,通常會有 上一步 下一步 這樣的按鈕。假設現在需要做乙個通用的 嚮導製作框架 那麼我們就需要在這個 嚮導製作框架 中,對 上一步 下一步 這些按鈕是否可用 是否enabled 進行控制。...