none
事件與表單關係 RRS feed

  • 問題

  • 我有兩個表單A和B:

    表單A有個事件,和一個按鈕RaiseEvent這個事件。

    表單B有個方法在 Load 時 AddHandler。

    問題:當B表單 Close 或 Disposed,也證明 B Is Nothing,為什麼A表單觸發事件,一樣會執行B的那個方法呢?

    查了一下線上手冊,使用RemoveHandler可以解決,但是我還是覺得為啥B都Nothing了,方法還是可以被執行?

    是否可以請大家指點我一下。

    2010年8月2日 下午 04:05

解答

  • http://msdn.microsoft.com/zh-tw/library/ms366768.aspx

    底下的「取消訂閱」有提到:只要發行物件擁有該參考,記憶體回收將無法刪除訂閱者物件

     

    2010年8月2日 下午 04:51
  • Hi,

    記憶體回收是會看資源是否仍有在使用

    當您AddHandler後,B物件的參考會在A中留存

    A觸發事件時,才能通知B物件

    (這部分應該委派就幫我們做掉了)

    因此B是無法回收的

    就算B做了Close或是Disposed

    該塊記憶體仍有被參考到

    所以仍會存在

    而且也有種說法是說在Disposed後,若尚未記憶體回收,此時若有再被用到,物件有可能會起死回生


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 小見光二 2010年8月3日 上午 09:15
    2010年8月3日 上午 04:19

所有回覆

  • http://msdn.microsoft.com/zh-tw/library/ms366768.aspx

    底下的「取消訂閱」有提到:只要發行物件擁有該參考,記憶體回收將無法刪除訂閱者物件

     

    2010年8月2日 下午 04:51
  • Hi,

    記憶體回收是會看資源是否仍有在使用

    當您AddHandler後,B物件的參考會在A中留存

    A觸發事件時,才能通知B物件

    (這部分應該委派就幫我們做掉了)

    因此B是無法回收的

    就算B做了Close或是Disposed

    該塊記憶體仍有被參考到

    所以仍會存在

    而且也有種說法是說在Disposed後,若尚未記憶體回收,此時若有再被用到,物件有可能會起死回生


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 小見光二 2010年8月3日 上午 09:15
    2010年8月3日 上午 04:19