[トピック内 5 記事 (1 - 5 表示)] << 0 >>
C#にて、WPFによるプログラミングを行っています。 自作イベントのイベントハンドラを += で追加していますが、 -= が必須な場合と、そうでない場合がの切り分けがよく分かりません。 今のところ、私の認識は以下のようなものです。 public class TestDlg : Window { private event EventHandler TestEvent; private vid Loaded(object sender, RoutedEventArgs e) { TestEvent += TestEventHandler; } private void TestEventHandler(object sender, EventArgs e) { Refresh(); } } のように、ロード時にイベントハンドラを += で登録するものとすると、 TestDlg を new した後で、Loaded()が一度しか呼ばれないなら、 ガベージコレクタに任せれば良く、-= はいらない。 TestDlg を new した後で、ShowDialog() を何度も呼び出すなど、 同一インスタンスで、Loaded()が複数回走るなら、-= しないと、 どんどんイベントハンドラが貯まっていく。 この認識で良いのでしょうか?
Azuleanさん、ありがとうございます。 であれば、もう一つ質問で申し訳ないのですが、 XAMLのコンパイル時には、 IComponentConnectorインターフェースを利用して、 同一インスタンスで、Loaded()が複数回走る場合でも -= が不要なように 実装されています(*.g.i.csのコードを参照)。 (実際に、テストしてみてもイベントハンドラが貯まることはなかった) この仕組みを(g.i.csではなく)自身のコード中で簡単に利用できる方法は ないのでしょうか? よろしくお願いいたします。
Azuleanさん、ありがとうございます。 こちらでも、いろいろ調査してみましたが、 やはり、Azuleanさんのおっしゃっている方法が良さそうです。 それでいきたいと思います。 ただ、なんとなく疑問なのが、 += で追加する際に、Dictionaryのように重複キー追加時は上書きとなる ようにしなかったんだろう?ということです(^^; そうすれば、イベントハンドラが貯まっていくこともない。 いずれにせよ、元の疑問については解決しましたので、クローズさせていただきます。
管理者用
- Child Tree -