2010-10-15 25 views
1

vb.net「WithEvents」語法是非常有用的,但如果引用一個長壽命對象的WithEvents字段沒有被清除,它通常會構成內存泄漏。任何方式通過一個命令清除所有WithEvents字段?

有沒有簡單的方法對處置程序有vb.net自動清除所有WITHEVENTS領域,並取消他們呢?

我已想出一種很好的方式來包裝一次性領域的創建,以便它們將當包含對象被佈置,而不必單獨列出這樣的對象被自動地設置。有沒有辦法照顧WithEvents字段,而無需在Dispose例程中手動將它們清空?

EDIT 由於沒有指示一個內置的方式做到這一點而不反射響應,有沒有使用反射的任何內置裝置,以確定一個特定的屬性是否是一個VB自動實現WITHEVENTS的「領域」?我知道一個名爲「foo」的WithEvents「字段」被實現爲一個名爲「foo」的屬性和一個名爲「_foo」的字段,但這是一種常見的命名模式,我不會指望它。是否有一些屬性可用於確定哪些屬性需要自動清零?

回答

1

這可能帶有一點反思魔力。但是沒有語言固有的方式來查詢標有WithEvents

+0

Bummer的字段。有沒有辦法讓一個方法參與事件訂閱,並在取消訂閱時保留一個引用來使用?對於iDisposables,我有一個通用RAII函數,它將一次性添加到列表並返回它。當物品被丟棄時,它所註冊的所有iDisposalbles將被丟棄。對事件訂閱同樣做的任何可能性? – supercat 2010-10-15 14:14:07