是否有可能檢測到事件是否有聽衆? (如果沒有人需要,我需要處理我的事件提供者對象)檢查事件是否有聽衆?
回答
假設類是在第三方庫,它可以「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. magento事件聽衆
- 2. Vue.js:檢查組件是否附有事件監聽器
- 3. 當事件獲取/失去聽衆時是否有事件發生?
- 4. 廣播聽衆不是廣播事件
- 5. 從事件聽衆開始
- 6. 在我的聽衆如何檢查dryrun標誌是否設置
- 7. 如何判斷是否沒有元素有聽衆要求點擊事件
- 8. 檢查事件是否爲
- 9. 檢查是否有代表傾聽?
- 10. 檢查一個元素是否有事件監聽器。沒有jquery
- 11. 空檢查和聽衆在Java
- 12. extJS事件/聽衆爲newb到js/extjs
- 13. VB.NET:建立事件管理器 - 聽衆
- 14. Symfony - 無法找到事件的聽衆
- 15. 處理幾個事件聽衆
- 16. 將聽衆事件傳遞給SlidingTabLayout
- 17. 主幹聽衆事件不起作用
- 18. 關於交易和事件聽衆
- 19. jQuery減少聽衆/事件的數量
- 20. Javascript的聽衆,他們是否記憶?
- 21. 如何檢測新聽衆是否已註冊?
- 22. 傾聽聽衆
- 23. 如何檢查是否存在父在擁有衆多關係
- 24. Kendo Ui - 檢查是否存在事件
- 25. 檢查事件是否由人觸發
- 26. Dojo - 檢查事件是否已連接
- 27. jQuery'on'事件,檢查是否爲
- 28. Javascript - 檢查事件監聽器
- 29. flash as3檢查事件偵聽器
- 30. 用一個聽衆收聽多個事件?
請參閱我的編輯..... – 2011-06-09 11:02:00