我正在“慢慢”从asp.net进入Silverlight,并对如何处理Web服务调用完成后需要执行某些代码的情况提出疑问。例如,当用户单击数据网格中的行时,将显示一个允许编辑记录的对话框。它包含许多组合框,复选框等。所以我需要先为每个组合框加载数据,并且比所有完成加载时,我需要设置绑定实体。因为我是这个异步的新手,所以我想要有一些计数器来跟踪已经调度了多少个调用,并且当它们完成时将它们减少一个,直到它为零,此时我可以提高负载已完成的事件,我可以继续依赖于此。但这似乎是非常笨重的方式。我相信很多人都遇到过这个问题,你怎么做到这一点。如果它有帮助,我们使用Prism与MVVM方法和Ria服务与Dtos。
答案 0 :(得分:0)
你所描述的几乎是要走的路。使用锁和互斥锁可以做更优雅的事情,但你的计数器会起作用。它有额外的奖励,你可以看到有多少操作在任何时候都在“进行中”。
您可以按顺序调度事件,但这会破坏异步操作的整个目的。
如果您分析了UI的每个部分需要,您可以在所有异步事件完成之前执行某些操作。确保首先启动运行时间最长的操作可能有所帮助 - 但不能保证其他较短的操作将首先完成。这完全取决于在进行呼叫时客户端和服务器上可用的资源。