Windows 7 Phone - Задержка навигации по экрану - PullRequest
1 голос
/ 02 ноября 2010

Привет. Я пытаюсь отложить навигацию по экрану.После загрузки экрана MainPage я хочу перейти к экрану MainMenu через 3 секунды.Я написал следующий код для этого.

public MainPage()
    {
        InitializeComponent();
        this.Loaded += new RoutedEventHandler(Default_Loaded);         
    }

    private void Default_Loaded(object sender, RoutedEventArgs e)
    {
       Thread.Sleep(3000);
       this.NavigationService.Navigate(new Uri("/MyProject;component/MainMenu.xaml", System.UriKind.RelativeOrAbsolute));
    }

Но этот код, похоже, не работает.Ожидаемая задержка (3 секунды) отсутствует.Может ли кто-нибудь помочь, пожалуйста?

С наилучшими пожеланиями

Ответы [ 3 ]

3 голосов
/ 02 ноября 2010

Две вещи, которые вы можете попробовать (и подумал в последнюю минуту).

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

Хорошее прохождение по использованию фонового рабочего здесь (опубликовано Pham Tien Sinh на msdn).

Phạm Tiểu Giao - Темы в WP7

2-й , вы можете альтернативно реализовать таймер.Здесь есть два варианта:

Класс DispatcherTimer (System.Windows.Threading)

Класс таймера (System.Threading)

Ох, еще одна вещь, которая приходит на ум , так как вы делаете какую-то хитрость при запуске ... ознакомьтесь с постами Питера Торра на тему мест и перенаправления навигации.Вы можете найти там несколько полезных камней в зависимости от того, что вы пытаетесь сделать.Хороший контент, о котором следует знать в любом случае.

Представляем концепцию «Места» - Блог Питера Торра

Перенаправление начальной навигации - Блог Питера Торра

1 голос
/ 07 октября 2012

Я просто использовал его, и он работал нормально. На всякий случай я добавил

using System.Threading;

и

using System.Windows.Threading;
0 голосов
/ 15 октября 2012

Если вы хотите заморозить приложение (например, вам нужно протестировать потоки), и по некоторым причинам вы не хотите использовать Thread.Sleep (), вы можете создать свою собственную, просто функцию Sleep

public static class Threads
{
    public static void Sleep(int milisec)
    {
        DateTime now = DateTime.Now;
        DateTime endOfSleep = now.AddMilliseconds(milisec);

        while (DateTime.Now < endOfSleep)
        {
        }
    }
}
...