我在线程和异步操作方面远非新手,但SL似乎比大多数框架更容易出现异步问题,特别是操作的排序。这在启动时最为明显,当您需要完成一些事情(例如身份,授权,缓存变暖)之前(渲染用户可以使用的UI,呈现用户特定信息等)。
什么特定的解决方案提供了最佳(或至少是一个好的)策略来处理启动时的操作顺序?为了提供上下文,假设在确定用户角色之前UI不是真正可用的,并假设需要在“一般使用”之前进行几次WCF调用。
到目前为止,我的解决方案涉及选择性地启用UI控件直到“准备好”,但这会让人感到被迫并对“准备就绪”条件过于敏感。这也增加了我不喜欢的耦合(谁是?)。
答案 0 :(得分:1)
要记住的Silverlight启动的一个有用方面是,在分配Application.RootVisual
之前,将继续显示启动xaml。在某些情况下(例如,外部下载主题),最好保留RootVisual的分配,直到完成其他未完成的异步任务为止。
另一个有用的控件是Silverlight Toolkit中的BusyIndicator
。也许当您准备好显示某些UI但没有填充UI的数据时,您可以使用具有BusyIndicator
的页面分配RootVisual。
答案 1 :(得分:0)
在我的意见中:
操作顺序具体情况,但如果阻止他的输入,请务必让用户知道发生了什么。
单个控件的选择性启用看起来很有趣,但是用户可能会首先使用该功能并且它将被禁用,因此您必须确保用户知道原因,否则他会感到困惑,为什么一开始它被禁用,何时10分钟后他去了那里工作。还取决于程序的主要功能是什么以及禁用控件具有哪些功能。如果应用程序主要功能显示书籍列表,那么最后加载该列表并不好。