1

当使用 WithEvents 声明而不是 AddHanlder 时,取消注册 (removeHandler) 到 Event 的对应代码是什么?这仅仅是将 WithEvents 变量设置为 Nothing 吗?这是否足够(框架明智)?

4

1 回答 1

0

假设我有一个表单,我只显示了一会儿,然后它就消失了,但它订阅了我的主域模型以获取有关更改的更新。我可能有这样的代码:

Private WithEvents _model As WeatherModel

Public Sub New(model As WeatherModel)
   _model = model
End Sub

Private Sub WeatherModel_Update(sender As Object, e As WeatherUpdateEventArgs) _
  Handles _model.WeatherUpdate

  'Handle updated weather conditions
End Sub

由于我引用的模型将超过我,如果我不取消订阅我的事件处理程序,它将导致此表单不会被垃圾收集。在这种情况下,我想确保我_model = Nothing在我的FormClosing事件处理程序中这样做。

如果表单和WithEvents对象具有相同的生命周期(即同时超出范围)或存在于应用程序的整个生命周期,则无需担心。

于 2014-01-02T20:47:43.143 回答