2012-06-12 69 views
3

我在我的基類中有一些事件要在IDisposable或Finalizer中應用以下模式。使用GetInvocationList取消訂閱事件處理程序

var onCategorizedMessage = this.OnCategorizedMessage.GetInvocationList().ToList(); 
foreach (var item in onCategorizedMessage) 
    this.OnCategorizedMessage -= item; 

我會重複此代碼每個事件一次。

這是一個處理退出事件以防止內存泄漏的合理和可靠的方式嗎?

+1

在許多情況下,這不是一個真正的問題。生產者是否會走出消費者? –

+0

@BryanCrosby - 我不知道。我正在創建一個HubTransport代理,不知道託管代碼中會發生什麼。 http://msdn.microsoft.com/en-us/library/dd877026(v=exchg.140).aspx – LamonteCristo

+0

從邏輯上講,我認爲取消訂閱是unsubscriber本身的責任。除此之外,處置時清除調用列表沒有多大意義。但是,在處置事件時(從未訂閱者本身)取消訂閱(爲了防止具有委託給已處理對象的方法的事件的調用列表),有一個BIG點。 – SimpleVar

回答

相關問題