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>
答案 0 :(得分:1)
在做了一些调试后,我得出的结论是它们是同步的,不能在不同的线程中运行,因此可以安全地调用第5行。
答案 1 :(得分:1)
根据Laurent Bugnion的MSDN article,信使操作是同步的。
答案 2 :(得分:0)
是的但是......
处理邮件时,您可以在侦听器中使用async方法。 或者也在消息回调中。