2010-12-01 40 views
0

我正在从asp.net“慢慢”进入Silverlight,并对如何处理在Web服务调用完成后需要执行某些代码的情况有疑问。例如,当用户单击数据网格中的行时,将显示一个允许编辑记录的对话框。它包含许多组合框,复选框等。因此,我需要首先为每个组合框加载数据,并且比全部完成加载时,我需要设置绑定的实体。由于我对这种异步事物很陌生,因此我正在考虑设置某种计数器,以便跟踪已发出多少个呼叫,并在他们完成时减少一个,直到它为零,此时我可以提升一个负载已经完成的事件,我可以继续进行依赖于此的事情。但是,这看起来非常笨重。我相信很多人都面临这个问题,所以你如何做到这一点。如果有帮助,我们使用Prism和MVVM方法,使用Ria服务和Dtos。加载表单和繁忙指示灯的方法

回答

0

你所描述的几乎是要走的路。你可以用锁和互斥锁来做更优雅的事情,但是你的计数器可以工作。它有奖金,你可以看到有多少操作在任何时候仍在“进行中”。

您可以按顺序调度您的事件,但这会破坏异步操作的整个目的。

如果你分析了你的用户界面的每个部分需要什么,你可能可以在你的异步事件的所有已完成之前做一些操作。确保首先开始最长时间的运行操作可能会有所帮助 - 但不能保证其他较短的操作会先完成。这一切都取决于呼叫发生时客户端和服务器上的可用资源。

+0

我以为SL内置了一些魔法。可以使用来自Async CTP的“等待”和“异步”吗? – epitka 2010-12-01 19:48:31