是否有可能檢測到事件是否有聽衆? (如果沒有人需要,我需要處理我的事件提供者對象)檢查事件是否有聽衆?
回答
假設類是在第三方庫,它可以「T進行修改:
public class Data
{
public event EventHandler OnSave;
//other members
}
在你的程序:
Data d = new Data();
d.OnSave += delegate { Console.WriteLine("event"); };
var handler = typeof(Data).GetField("OnSave", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(d) as Delegate;
if (handler == null)
{
//no subscribers
}
else
{
var subscribers = handler.GetInvocationList();
//now you have the subscribers
}
它似乎調用GetInvocationList並不是真的必要,檢查處理器爲null就足夠了。我對麼? – user626528 2011-06-12 11:03:43
@ user626528:是的,你是對的。在這個例子中,我展示了一些在某些情況下可能有用的東西。 – 2011-06-12 14:18:47
如果在沒有添加OnSave事件時處理程序將爲空,那麼上面的代碼應該有空檢查,否則會出錯。 – Justin 2014-02-18 20:49:28
您可以檢查事件是否爲!= null。
順便說一句,在C#中,你需要這個檢查每次引發事件:
if (TheEvent != null) {
TheEvent(this, e);
}
,究其原因正是以檢查事件有任何監聽器。
編輯
因爲你不能從類外部訪問TheEvent,你可以實現,做檢查的方法:
public class TheClass {
public bool HasEventListeners() {
return TheEvent != null;
}
}
我需要在對象之外檢查它,因爲它是由第三方製作的。我需要檢查是否有人訂閱了對象的事件,並在沒有訂閱的情況下處置它。 – user626528 2011-06-09 10:47:00
我不認爲你可以,你需要一個方法包裝 – Simone 2011-06-09 10:50:12
看到編輯的答案。 – Simone 2011-06-09 10:51:59
void Main()
{
Console.WriteLine(ContainsOnSomethingEvent()); // false
OnSomething += (o,e) => {};
Console.WriteLine(ContainsOnSomethingEvent()); // true
}
EventHandler mOnSomething;
event EventHandler OnSomething {
add { mOnSomething = (EventHandler)EventHandler.Combine(mOnSomething, value); }
remove { mOnSomething = (EventHandler)EventHandler.Remove(mOnSomething, value); }
}
public bool ContainsOnSomethingEvent() {
return mOnSomething != null && mOnSomething.GetInvocationList().Length > 0;
}
- 1. Vue.js:檢查組件是否附有事件監聽器
- 2. 廣播聽衆不是廣播事件
- 3. 從事件聽衆開始
- 4. 在我的聽衆如何檢查dryrun標誌是否設置
- 5. 檢查事件是否爲
- 6. 檢查是否有代表傾聽?
- 7. 檢查一個元素是否有事件監聽器。沒有jquery
- 8. Symfony - 無法找到事件的聽衆
- 9. VB.NET:建立事件管理器 - 聽衆
- 10. jQuery減少聽衆/事件的數量
- 11. 關於交易和事件聽衆
- 12. Javascript的聽衆,他們是否記憶?
- 13. 如何檢查是否存在父在擁有衆多關係
- 14. Javascript - 檢查事件監聽器
- 15. flash as3檢查事件偵聽器
- 16. 用一個聽衆收聽多個事件?
- 17. 檢查串口是否正在偵聽
- 18. 在一個聽衆中帶來所有點擊鼠標事件
- 19. 是否有插件來檢查哪些事件被調用?
- 20. Twilio檢測是否有人接聽
- 21. 檢查哪個按鈕是「點擊」事件監聽
- 22. 如何創建事件和偵聽器來檢查文件夾中是否有特定文件
- 23. 檢查控制是否有事件點擊EventHandler
- 24. onBlur Javascript事件與檢查元素是否有焦點
- 25. 檢查單擊事件後,所有div是否隱藏
- 26. 是否有必要檢查CollectionChanged事件中的NotifyCollectionChangedAction?
- 27. 靜態聽衆
- 28. 多SeekBars聽衆
- 29. 處理聽衆
- 30. Java onclick聽衆
請參閱我的編輯..... – 2011-06-09 11:02:00