1

AddHanlder の代わりに WithEvents 宣言を使用する場合、イベントへの登録を解除 (removeHandler) するための対応するコードは何ですか? これは、その 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 に答える