理想我想要一個功能類似於下面的所有事件(這個例子不編譯):C#如何拆除和清理
void AddRemoveEvent<TEvent, TArgs>(TEvent e, EventHandler<TArgs> h, bool add)
where TArgs : System.EventArgs
{
if (add)
{
e += h;
}
else
{
e -= h;
}
}
然後,我可以寫功能:
void AddRemoveEvents(bool add)
{
AddRemoveEvent(aMemberControl.Click, OnClick, add);
}
我然後知道我可以再次調用該函數來刪除所有處理程序。我想這將是比寫,保持和依靠保持同步兩種功能強:
void AddEvents(bool add)
{
aMemberControl.Click += OnClick;
}
void RemoveEvents(bool add)
{
aMemberControl.Click -= OnClick;
}
一個同事寫了一個方便的類,它這種東西,使用反射。這非常有用,但它依賴於作爲字符串傳入的事件的名稱。我正在尋找一個型安全版本。有沒有人有任何想法,如果有可能寫這個?
謝謝。
我知道我不應該在任何地方取消連線,因爲垃圾收集器應該照顧大多數情況。但是,有時候一個流浪事件會導致泄漏,所以我發現嘗試刪除所有添加的事件會更安全,而不是試圖與分析器混淆,試圖找出導致問題的事件。
我見過此相關的問題:
How to remove all event handlers from a control