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

没错但是...

处理消息时,您可以在侦听器中使用异步方法。或者在消息回调中。

于 2014-01-05T06:18:31.300 回答