簡體   English   中英

C#.NET適當的事件訂閱和取消訂閱

[英]C# .NET proper event subscribing and un-subscribing

我有一個連續運行的應用程序,它創建和銷毀類,其中一些類具有鼠標單擊事件之類的事件……第一個問題是退訂的正確方法是什么? 如果訂閱看起來像這樣:

Panel1.MouseClick += new MouseEventHandler(Action_MouseClick);

像這樣退訂是否合適:

Panel1.MouseClick -= new MouseEventHandler(Action_MouseClick);

還是可以這樣做:

Panel1.MouseClick -= Action_MouseClick;

還是兩種方式都可以?

我的另一個問題是,如果我使用Microsoft Visual C#Studio通過設計器創建事件,它是否會作為“處置”方法的一部分自動退訂? 還是我仍然需要在代碼中放入unsubscribe方法?

兩種退訂方法都將具有相同的效果,並且都是正確的。

至於其他問題..如果您使用設計器為窗體上的控件創建事件,則在處理窗體時,事件源將不再存在,因此將不會調用它們。 我想我是說不必分離那些事件。

我的另一個問題是,如果我使用Microsoft Visual C#Studio通過設計器創建事件,它是否會作為“處置”方法的一部分自動退訂? 還是我仍然需要在代碼中放入unsubscribe方法?

從內存:不,它不會生成退訂代碼。

您可以通過打開classname.designer.cs文件並檢查生成的Dispose方法來自己仔細檢查。

設計器代碼不會自動取消訂閱,但是只要無法從應用程序代碼訪問表單及其所有控件,訂閱就不應使控件保持活動狀態。 當訂戶和事件生產者的生存期不同時,纏留事件處理程序主要是一個問題,而對於Form及其控件,通常不應該這樣。

如果動態創建/刪除控件,則可能會想要管理事件,但是如果不再引用刪除的控件並且刪除的控件停止觸發事件,則並不是嚴格必須的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM