实现SL5 OOB应用程序的启动任务

时间:2012-05-22 19:27:01

标签: silverlight silverlight-5.0

我正在整理一个Silverlight 5应用程序,该应用程序将在浏览器外运行,并且在启动时会有一些内容。具体来说,以下是我需要遵循的步骤:

  1. 检查应用程序是否已用完浏览器(如果没有,请显示一个屏幕,指示用户在本地安装)。
  2. 显示“启动画面”(如果在执行剩余步骤时播放动画会很好)。
  3. 配置MEF
  4. 从服务器预加载上下文信息和“静态”数据(例如,设置)。在任何应用程序逻辑运行之前,都需要此数据。
  5. 动态加载其他XAP文件,包括外部主题库。
  6. 将“启动画面”替换为包含导航框架的外壳。
  7. 导航到应用程序的起始页。
  8. 我还需要支持应用程序扩展服务(IApplicationService,IApplicationLifetimeAware),因此我实现的任何进程都必须遵守这些服务。这些服务中的大多数都需要配置MEF,因此在配置MEF并导入满意之前不应执行它们。

    另一个考虑因素是,只有在拉入动态XAP文件并重新组合MEF后才能满足某些导入。

    我遇到的一个障碍是,在前面的步骤完成之前,我无法执行第5步。加载XAP文件或异步调用服务器以获取数据允许代码继续。我需要一种方法来“停止”UI,直到所有组合完成并且所有必需的上下文数据都已加载。

    因此,我正在寻找满足所有这些要求的推荐方法,并且很乐意提供更多详细信息,如果这有助于找到可行的解决方案。

    更新

    我能给出的最好的解释是,我必须'释放'UI线程以显示“启动画面”,但也会在每个步骤执行时暂停应用程序的正常生命周期。我不能(也不想)在Application.Start事件处理程序中执行所有操作,因为应用程序服务已经启动。

    另外,发布UI线程意味着我在后台工作并让原始方法(例如Application.Start)返回,运行时将在启动过程中继续前进。例如,在应用程序服务的Starting方法中启动后台进程然后返回允许运行时在Application对象上引发Start事件。但是如果我需要后台进程才能完成下一步,我必须暂停阻止UI的当前线程。

    所以我不确定如何划分工作或放置它(应用程序,应用程序服务,引导程序,工作流程等)。

1 个答案:

答案 0 :(得分:0)

您可以使用ManualResetEvent类强制服务调用为Sync(并保证它们完成的顺序)。您还可以使用它将后台线程同步到主UI线程。

http://mohundro.com/blog/2006/06/27/a-little-bit-about-manualresetevent/