MVVMLight消息总线单同步/异步

时间:2013-07-16 03:35:13

标签: mvvm messaging

Silverlight 应用程序的 MVVMLight 有一个消息总线。 View Models可以在彼此之间发送消息,因此所有消息都可以解耦。我的问题是,发送消息是同步还是异步操作?

在以下代码中,主(协调)视图模型将消息发送到所有子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已完成加载?< / p>

3 个答案:

答案 0 :(得分:1)

在做了一些调试后,我得出的结论是它们是同步的,不能在不同的线程中运行,因此可以安全地调用第5行。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

是的但是......

处理邮件时,您可以在侦听器中使用async方法。 或者也在消息回调中。