2011-06-21 32 views
2

我有一個等待事件發生的類。替代EventInfo.AddEventHandler的非公開事件

我用反射到事件處理程序連接到該對象,像這樣:

public EventMonitor(object eventObject, string eventName) 
    { 
     _eventObject = eventObject; 
     _waitEvent = eventObject.GetType().GetEvent(eventName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); 

     _handler = new EventHandler(SetEvent); 
     _waitEvent.AddEventHandler(eventObject, _handler); 
    } 

這一切工作正常,但我有一個事件是不是公共的(它的內部並暴露於這種測試通過InternalsVisibleToAttribute組裝)。

AddEventHandler調用失敗,並顯示「無法添加事件處理程序,因爲該事件不存在公共添加方法。」

有沒有可以使用的解決方法?

回答

7

不知道我怎麼錯過了之前調用此方法,但這裏的情況下,別人的解決方案相同的問題

與更換的addEventHandler電話:

var addMethod = _waitEvent.GetAddMethod(true); 
addMethod.Invoke(eventObject, new[] {_handler});