添加Silverlight启动屏幕的最短显示时间

添加Silverlight启动屏幕的最短显示时间,silverlight,silverlight-3.0,splash-screen,Silverlight,Silverlight 3.0,Splash Screen,在网页上托管silverlight应用程序时,可以使用splashscreensource参数指定在下载真实xap文件时显示的简单silverlight 1.0(xaml+javascript)控件,并且可以通过onSourceDownloadProgressChanged接收下载进度通知。如果xap文件在缓存中,则不会显示初始屏幕(如果下载只需1秒,则初始屏幕将仅显示1秒) 我知道这通常不是最佳实践,但我正在寻找一种方法来指定启动屏幕的最短显示时间-即使xap缓存或下载速度很快,启动屏幕也会保

在网页上托管silverlight应用程序时,可以使用
splashscreensource
参数指定在下载真实xap文件时显示的简单silverlight 1.0(xaml+javascript)控件,并且可以通过
onSourceDownloadProgressChanged
接收下载进度通知。如果xap文件在缓存中,则不会显示初始屏幕(如果下载只需1秒,则初始屏幕将仅显示1秒)

我知道这通常不是最佳实践,但我正在寻找一种方法来指定启动屏幕的最短显示时间-即使xap缓存或下载速度很快,启动屏幕也会保持至少5秒钟(例如,显示所需的法律免责声明、公司标识或其他错误)

  • 我确实希望只在初始屏幕上(而不是在主xap中)这样做,因为我希望它是干净的、不中断的(例如声音错误),并且在用户打开页面时立即显示给用户,而不是在下载之后(可能需要1到20秒)

  • 我不希望通过预加载来实现这一点——用完整的Silverlight xap应用程序(具有自己的加载屏幕)替换初始屏幕,然后通过编程在最短等待时间后加载并显示完整的xap


    • 一个鲜为人知的事实是,启动屏幕在XAP加载后仍保持原位。直到加载应用程序
      RootVisual
      。因此,如果在应用程序
      Startup
      事件中未分配
      RootVisual
      ,则启动屏幕将永远显示

      因此,您可以使用如下代码将飞溅的显示延迟几秒钟:-

      private void Application_Startup(object sender, StartupEventArgs e)
      {
          var timer = new DispatcherTimer();
          timer.Interval = TimeSpan.FromSeconds(10);
          EventHandler eh = null;
      
          eh = (s, args) =>
          {
              timer.Stop();
              this.RootVisual = new Test();
              timer.Tick -= eh;
          };
      
          timer.Tick += eh;
      
          timer.Start();
      }
      
      这可以通过反应式框架简化:-

      private void Application_Startup(object sender, StartupEventArgs e)
      {
          Observable.Timer(TimeSpan.FromSeconds(10), Scheduler.Dispatcher)
              .Subscribe((l) =>
          {
              this.RootVisual = new Test();
          });
      }
      

      但是,反应式框架至少为Xap的大小增加了66KB,因此仅使用它您已经将反应式框架用于其他用途。

      请注意,如果您只想在开发过程中延长启动屏幕的显示时间,那么添加一个延迟Xap响应的Fiddler规则是非常简单的文件

      这是一个具有这种效果的规则示例。有关如何应用规则的详细信息,请参阅-这真的非常简单

      if (oSession.uriContains("Midwinter.ReasonableBasis.Client.xap")){
          oSession["ui-color"]="orange"; 
          oSession["ui-bold"]="true";
          //Delay received data by X ms per KB downloaded.
          oSession["response-trickle-delay"] = "10"; 
      }
      

      一个很好的选择是能够全面控制启动屏幕何时关闭以及主应用程序何时运行。这将允许在下载xap后显示一个“跳过”按钮,或者允许在用户点击它之前显示一个启动屏幕。我必须检查两者是否都可以与Javascript交互。如果是这种情况,我可以看到启动屏幕在Javascript中设置一个“完成”标志,当它准备关闭时,应用程序启动每隔250ms检查一次该标志,直到设置完成或达到某个超时。@David:让我们知道该检查是如何进行的,我还想知道,当启动屏幕仍然有效时,应用程序是否可以访问javascript。