代码之家  ›  专栏  ›  技术社区  ›  David

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

  •  2
  • David  · 技术社区  · 14 年前

    在网页上托管Silverlight应用程序时,可以使用 splashscreensource 参数指定在下载真实的xap文件时显示的简单silverlight 1.0(xaml+javascript)控件,该控件可以通过 onSourceDownloadProgressChanged . 如果xap文件在缓存中,则不会显示启动屏幕(如果下载仅需1秒,则启动屏幕将仅显示1秒)。

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

    • 我只想在启动屏幕上(而不是在主xap中)完成,因为我希望它是干净的、不间断的(例如一个声音错误),并在用户打开页面后立即显示给用户,而不是在下载之后(这可能需要1到20多秒)。

    • 我不希望通过预加载来实现这一点——用一个完整的silverlight xap应用程序(用它自己的加载屏幕)替换启动屏幕,然后在最短的等待时间后,可以编程加载并显示完整的xap。

    2 回复  |  直到 12 年前
        1
  •  2
  •   AnthonyWJones    14 年前

    这是一个鲜为人知的事实,即启动屏幕在xap加载后仍保持原位。直到应用程序 RootVisual 荷载。因此,如果您不指定 根视觉 在申请中 Startup 事件启动屏幕将永远显示。

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

    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();
        });
    }
    

    然而,reactive框架至少为xap的大小增加了66kb,所以只使用它,您已经在使用reactive来做其他事情了。

        2
  •  0
  •   Scott Munro Shimmy Weitzhandler    12 年前

    请注意,如果您只想在开发期间延长启动屏幕的显示时间,那么添加fiddler规则非常简单,它会延迟xap文件的响应。

    这是一个具有这种效果的规则示例。见 Pedro Forte's post 有关如何应用规则的详细信息-非常简单!

    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"; 
    }
    
    推荐文章