1

そのため、オブジェクトのロードされたイベントにいくつかのイベント ハンドラーを登録しています。

tv.PreviewMouseDown += new MouseButtonEventHandler(SignalScrollViewer_PreviewMouseDown);

しかし、私には2つの質問がありました。

  1. ロードが 2 回発生し、イベント ハンドラーを再度追加しようとした場合、問題は発生しますか?
  2. イベントの登録解除はどのように処理すればよいですか? 破棄時に登録解除を自動的に処理しますか、それともアンロードなどのイベントで処理する必要がありますか?
4

4 に答える 4

4
  1. はい、別のサブスクリプションが発生し、ハンドラーが 2 回実行されます。ロードされたハンドラー内のロードされたハンドラーを削除できます。

    MSDN :

    ユーザーが開始したシステム テーマの変更の結果として、コントロールで Loaded と Unloaded の両方が発生する場合があります。テーマの変更により、コントロール テンプレートと含まれているビジュアル ツリーが無効になり、その結果、コントロール全体がアンロードおよび再ロードされます。したがって、Loaded は、ページへのナビゲーションによってページが最初に読み込まれたときにのみ発生すると想定することはできません。

  2. オブジェクトがなくなった場合、イベントを発生させることはできないため、それについて何もする必要はありません。また、ハンドラーはオブジェクトを存続させません (逆です)。
于 2013-08-23T22:49:33.087 に答える
3

ロードが 2 回発生し、イベント ハンドラーを再度追加しようとした場合、問題は発生しますか?

イベントは複数回サブスクライブされます。このシナリオを処理したい場合があります。

イベントの登録解除はどのように処理すればよいですか? 破棄時に登録解除を自動的に処理しますか、それともアンロードなどのイベントで処理する必要がありますか?

Unloaded などで登録を解除できます。一般に、これを行う必要があるのは、サブスクライブしているイベントが存続期間を超えて存続する場合のみです。それが自分自身のオブジェクトである場合 (つまり、ユーザー コントロール内のボタンのイベントをユーザー コントロールからサブスクライブしている場合)、サブスクライブ解除は必要ありません。

于 2013-08-23T22:48:05.670 に答える