2011-12-14 21 views
2

獲取合適的事件處理程序後GetInvocationList()

public delegate void AdministrationEventHandler(object sender, AdministrationEventArgs e); 
public static event AdministrationEventHandler MainAdministrationEventHandler; 

它在我的WCF服務的主要事件處理程序。 我也有

private void MyEventHandler(object sender, AdministrationEventArgs e) 
{ 
//code 
} 

我添加新的元素

AdministrationEventHandler userToAddEventHandler = new AdministrationEventHandler(MyEventHandler); 

然後

MainAdministrationEventHandler += userToAddEventHandler; 

在我Broadcast()我稱之爲MyEventHandler每個處理器。 根據AdministrationEventArgs e的說法,我想撥打Broadcast()

我試圖做一些類似MainAdministrationEventHandler的列表,並呼叫Broadcast()這個列表的適當元素,但它不起作用。

我被MainAdministrationEventHandler.GetInvocationList()

讓所有的處理程序是否有可能得到它在GetInvocationList()後檢查e說法?

我怎樣才能以其他方式致電Broadcast()合適的處理程序?

回答

3

什麼是合適的處理程序?因爲根據您的代碼,您只能爲該事件分配類型爲AdministrationEventHandler的處理程序。

而且,從GetInvocationList()返回的列表只包含要調用的處理程序。這次他們還沒有被調用,你需要調用它們並將e傳遞給它們。

像這樣的東西應該做的:

AdministrationEventArgs args = new AdministrationEventArgs(); 
Delegate[] dels = MainAdministrationEventHandler.GetInvocationList(); 
if (dels != null) 
    foreach (Delegate handler in dels) 
     handler.Invoke(this, args); 
+0

例如我有3個不同的AdministrationEventArgs。每個AdministrationEventHandler一個。現在我想在foreach循環中查看它們,並在3個處理程序中的2個上調用它。可能嗎? – Saint 2011-12-14 23:21:38