2

SilverlightアプリケーションのMVVMLightにはメッセージ バスがあります。ビュー モデルは相互にメッセージを送信できるため、すべてを切り離すことができます。私の質問は、メッセージの送信は同期または非同期操作ですか?

次のコードでは、メイン (調整) ビュー モデルがすべての子 VM にメッセージを送信してデータを読み込みます。すべてのデータがロードされた後、メイン VM は、変数IsAllChildViewModelsCompletedLoadingに設定されているすべてのデータがロードされたことを示すステータスを表示する必要があります 。

MainVM.PopulateData()
{
    IsAllChildViewModelsCompletedLoading = false; // Line 1

    MessageBus.Send(new Child1VMMessage()); // Line 2
    MessageBus.Send(new Child2VMMessage()); // Line 3
    MessageBus.Send(new Child3VMMessage()); // Line 4

    IsAllChildViewModelsCompletedLoading = true; // Line 5
}

上記のコードでは、3 行目のMessageBus.Sendは、2 行目のMessageBus.Sendが完了するまで待機しますか。5 行目のコードは、2、3、4 のコードが実行された後にのみ実行されますか? または、IsAllChildViewModelsCompletedLoadingフラグを true に設定すると、 PopulateDataメソッドがより速く終了し、上記のメソッドを使用してすべての子 VM の読み込みが完了したことを知る方法はありませんか?

4

3 に答える 3

2

Laurent Bugnion によるこのMSDN 記事によると、メッセンジャー操作は同期的です。

于 2014-07-24T18:38:34.237 に答える
2

いくつかのデバッグを行った後、それらは同期的であり、異なるスレッドで実行されないという結論に達したため、5 行目を呼び出しても問題ありません。

于 2013-08-11T12:46:28.067 に答える
0

本当だけど…

メッセージを処理するときに、リスナーで async メソッドを使用できます。または、メッセージのコールバックでも。

于 2014-01-05T06:18:31.300 に答える