在网页上托管silverlight应用程序时,可以使用splashscreensource
参数指定在下载真实xap文件时显示的简单Silverlight 1.0(xaml + javascript)控件,并且可以接收通过onSourceDownloadProgressChanged
通知下载进度。如果xap文件位于缓存中,则不显示启动屏幕(如果下载仅需1秒,则启动屏幕将仅显示1秒钟。)
我知道这不是一般的最佳做法,但我正在寻找一种方法来指定启动画面的最短显示时间 - 即使缓存的xap或下载速度很快,启动屏幕也会保持不变至少,比方说,5秒(例如显示所需的法律免责声明,公司标识或其他错误)。
我确实想在启动画面中独占(而不是在主xap中),因为我希望它是干净且不间断的(例如声音错误),并且只要它们显示给用户打开页面,而不是下载后(可能需要1到20秒以上)。
我不希望通过预加载来实现这一点 - 用完整的Silverlight xap应用程序替换启动屏幕(使用它自己的加载屏幕),然后可编程加载并在最短的等待时间后显示完整的xap。
答案 0 :(得分: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框架至少会增加66KB的Xap大小,所以只使用它已经将Reactive的东西用于其他东西。
答案 1 :(得分:0)
请注意,如果您只对在开发期间延长启动画面的显示时间感兴趣,那么添加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";
}