2

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

我知道这通常不是最佳实践,但我正在寻找一种方法来指定启动画面的最短显示时间 - 即使 xap 缓存或下载速度很快,启动画面也会至少保持一段时间,让我们比如说,5 秒(例如显示所需的法律免责声明、企业身份标记或其他错误)。

  • 我确实想专门在启动屏幕中执行此操作(而不是在主 xap 中),因为我希望它干净且不受干扰(例如声音错误)并在用户打开页面后立即显示给用户,而不是下载后(可能需要 1 到 20+ 秒)。

  • 我不希望通过预加载来完成此操作 - 用完整的 Silverlight xap 应用程序(使用它自己的加载屏幕)替换初始屏幕,然后在最短等待时间后以可编程方式加载并显示完整的 xap。

4

2 回答 2

2

这是一个鲜为人知的事实,即启动画面在 XAP 加载时间之后仍然存在。RootVisual在应用程序加载之前它不会被替换。因此,如果您不在RootVisual应用程序Startup事件中分配 ,则启动屏幕将永远显示。

因此,您可以使用如下代码将启动画面的显示延迟几秒钟:-

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

这可以通过 Reactive 框架来简化:-

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 的东西来做其他事情。

于 2010-04-14T20:19:02.933 回答
0

请注意,如果您只对在开发期间延长启动画面的显示时间感兴趣,那么添加 Fiddler 规则来延迟 Xap 文件的响应非常简单。

这是具有此效果的规则示例。有关如何应用规则的详细信息,请参阅Pedro Forte 的帖子- 这真的很容易!

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"; 
}
于 2012-10-16T15:57:53.287 回答