今天遇到乙個問題,就是希望能夠動態呼叫事件。傳統的思路是,通過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 進行控制。...