2013-07-16 50 views
1

MVVMLightSilverlight應用程序有一個消息總線。視圖模型可以互相發送消息,因此所有這些消息都可以分離。我的問題是,發送消息是同步還是異步操作?MVVMLight消息總線單一同步/異步

在以下代碼中,主(協調)視圖模型向所有子虛擬機發送消息以加載數據。加載所有數據後,主虛擬機必須顯示一個狀態,說明所有數據已加載,該數據在變量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 
} 

在上面的代碼,莫非MessageBus.Send在3行等待,直到2 MessageBus.Send完成。第5行上的代碼是否只有在2,3,4上的代碼執行後才執行?或者PopulateData方法將退出更快通過設置標誌IsAllChildViewModelsCompletedLoading爲true,並且我們無法通過使用上述方法知道所有子虛擬機已完成加載嗎?

回答

1

做一些調試後,我得出的結論,他們是同步的,而不是在不同的線程運行,因此它是安全的調用線5

0

真實的,但...

你可以使用處理消息時偵聽器中的異步方法。 或者也在消息回調中。

+0

使用三個異步操作也將異步運行,因此將IsAllChildViewModelsCompletedLoading設置爲true是安全的。將所有三個操作轉換爲任務具有並行運行它們的優點。 –

1

根據Laurent Bugnion的MSDN article,信使操作是同步的。