Добавление минимального времени отображения для заставки Silverlight - PullRequest
2 голосов
/ 14 апреля 2010

При размещении приложения silverlight на веб-странице можно использовать параметр splashscreensource, чтобы указать простой элемент управления Silverlight 1.0 (xaml + javascript), который будет отображаться во время загрузки реального файла xap и который может получать уведомления о загрузка происходит через onSourceDownloadProgressChanged. Если файл xap находится в кэше, заставка не отображается (и если загрузка занимает всего 1 секунду, заставка будет отображаться только в течение 1 секунды).

Я знаю, что это не лучшая практика в целом, но я ищу способ указать минимальное время отображения для заставки - даже если xap кэшируется или загрузка происходит быстро, заставка будет оставаться на по крайней мере, скажем, 5 секунд (например, чтобы показать обязательный отказ от ответственности, фирменный знак или другую ошибку).

  • Я хочу сделать это исключительно на заставке (а не в главном xap), так как я хочу, чтобы он был чистым и бесперебойным (например, звуковая ошибка) и отображался пользователю, как только он откройте страницу, а не после загрузки (это может занять от 1 до 20+ секунд).

  • Я бы предпочел не делать этого с предварительной загрузкой - заменив заставку полным приложением xap Silverlight (с собственным экраном загрузки), которое затем программно загружается и отображает полный xap после минимального времени ожидания.

Ответы [ 2 ]

2 голосов
/ 15 апреля 2010

Это малоизвестный факт, что заставка остается на месте после того времени, которое требуется 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 framework: -

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

Однако структура Reactive добавляет как минимум 66 КБ к размеру вашего Xap, поэтому используйте его только тогда, когда вы уже используете Reactive для других вещей.

0 голосов
/ 16 октября 2012

Обратите внимание, что если вы заинтересованы только в увеличении времени отображения заставки во время разработки, то очень просто добавить правило Fiddler, которое задерживает ответ из файла Xap.

Это пример правила, которое будет иметь такой эффект. См. пост Педро Форте для получения подробных сведений о том, как применить правило - это действительно очень просто!

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"; 
}
...