1

次のことを行うAという名前のユーザーコントロールがあるとします。

Page_Load:
    List<object> myList = PrepareList();
    ListPrepared(this, new AArgs(myList)); // Event that lets subscribers modify the list.
    OperateOnAndDisplayList(myList);

Aのインスタンスは、ListPreparedイベントをサブスクライブし、作成されたリストを変更するページに保持されます。完全を期すためにリストを変更しているので、リストを操作して表示する前に、ページのハンドラーを終了させたいのです。これをどのように実装しますか?(または、これは恐ろしいアイデアですか?リストを公開し、外部の要素がリストを変更するためにリストの知識を持っている必要があるためですか?)

4

2 に答える 2

4

イベントは同期的に発生します。これは、イベントのすべてのサブスクライバーが、OperateOnAndDisplayListメソッドが呼び出される前にコードを実行することを意味します。これmyListは、イベントサブスクライバーのいずれかによって変更された場合、その変更はイベント発行者にも表示されることも意味します。これが希望どおりでない場合は、イベントを発生させる前にリストのコピーを作成し、イベントののコピーのみを送信する必要がありますEventArgs

于 2012-08-23T15:27:31.493 に答える
3

すべてのコードが完了したときにイベントハンドラーが戻ってくる場合は、それについて心配する必要はありません。イベントは、メソッドを呼び出す方法にすぎません。非同期操作とは直接関係ありません。

于 2012-08-23T15:27:44.560 に答える