我正在整理一个Silverlight 5应用程序,该应用程序将在浏览器外运行,并且在启动时会有一些内容。具体来说,以下是我需要遵循的步骤:
我还需要支持应用程序扩展服务(IApplicationService,IApplicationLifetimeAware),因此我实现的任何进程都必须遵守这些服务。这些服务中的大多数都需要配置MEF,因此在配置MEF并导入满意之前不应执行它们。
另一个考虑因素是,只有在拉入动态XAP文件并重新组合MEF后才能满足某些导入。
我遇到的一个障碍是,在前面的步骤完成之前,我无法执行第5步。加载XAP文件或异步调用服务器以获取数据允许代码继续。我需要一种方法来“停止”UI,直到所有组合完成并且所有必需的上下文数据都已加载。
因此,我正在寻找满足所有这些要求的推荐方法,并且很乐意提供更多详细信息,如果这有助于找到可行的解决方案。
更新
我能给出的最好的解释是,我必须'释放'UI线程以显示“启动画面”,但也会在每个步骤执行时暂停应用程序的正常生命周期。我不能(也不想)在Application.Start事件处理程序中执行所有操作,因为应用程序服务已经启动。
另外,发布UI线程意味着我在后台工作并让原始方法(例如Application.Start)返回,运行时将在启动过程中继续前进。例如,在应用程序服务的Starting方法中启动后台进程然后返回允许运行时在Application对象上引发Start事件。但是如果我需要后台进程才能完成下一步,我必须暂停阻止UI的当前线程。
所以我不确定如何划分工作或放置它(应用程序,应用程序服务,引导程序,工作流程等)。
答案 0 :(得分:0)
您可以使用ManualResetEvent类强制服务调用为Sync(并保证它们完成的顺序)。您还可以使用它将后台线程同步到主UI线程。
http://mohundro.com/blog/2006/06/27/a-little-bit-about-manualresetevent/