2

カスタムイベントをサブスクライブしているオブジェクトがあるので、それらすべてを一度に変更できます。問題は、それによってそれらがスコープから外れてガベージコレクションされることは決してないということです。コントロールを無効にしても、それに含まれるコントロールは無効になりません。実際、ヌルのコントロールでさえ収集されません!(私が間違っている場合は、私を訂正してください。)

そこで、イベントをクラスでラップし、そのクラスのインスタンスを作成して使用し、オブジェクトにGCを適用させたい場合はnullにして、新しいインスタンスを作成するという解決策を考えました。続ける。

しかし、私はそれについて2つの質問があります:

  1. それは実際に機能しますか、それともオブジェクトはGCされても回避されますか?
  2. これを達成するためのより簡単で簡単な方法はありますか?

編集:パート2が回答されました(回答へのコメントで)。単に行う:event_name = null;。しかし、パート1についてはまだ疑問に思っています-それは機能しますか?

4

2 に答える 2

3

イベントの登録を解除する必要があります。これは購読と同じように機能しますが、 の-=代わりに演算子を使用し+=ます。

例:

foo.SomeEvent-= new EventHandler(foo_SomeEvent);
于 2012-12-05T20:10:53.293 に答える
0

パート2への回答(Servyのコメントによる):

event_name = null;
于 2012-12-09T11:37:25.903 に答える