Как я могу остановить таймер на WP7 от внешнего события? - PullRequest
2 голосов
/ 22 декабря 2011

Мне нужен таймер, который перенаправляет меня на другую страницу через 5 секунд, проблема в том, что он перенаправляет меня на эту страницу каждые 5 секунд, поэтому мне нужно остановить его. Если я остановлю его после tmr.Start(), событие не будет выполнено. Как я могу сделать это в случае OnTimerTick?

DispatcherTimer tmr = new DispatcherTimer();
tmr.Interval = TimeSpan.FromSeconds(5);
tmr.Tick += new EventHandler(OnTimerTick);
tmr.Start();

void OnTimerTick(object sender, EventArgs e)
{
  NavigationService.Navigate(new Uri("/lvlSet1/s1lvl3.xaml", UriKind.Relative));            
}

Ответы [ 2 ]

4 голосов
/ 22 декабря 2011

Описание

Два возможных решения.

  1. Создайте свой экземпляр DispatcherTimer на уровне класса, а не в своем методе. Затем вы можете получить к ним доступ из вашего OnTimerTick метода.
  2. Вы можете привести отправителя к DispatcherTimer в вашем OnTimerTick методе.

Пример

1. Решение

    public class YourClass
    {
        DispatcherTimer tmr = new DispatcherTimer();

        public void YourMethodThatStartsTheTimer()
        {
            tmr.Interval = TimeSpan.FromSeconds(5);
            tmr.Tick += new EventHandler(OnTimerTick);
            tmr.Start();
        }

        void OnTimerTick(object sender, EventArgs e)
        {
            tmr.Stop();
            NavigationService.Navigate(new Uri("/lvlSet1/s1lvl3.xaml", UriKind.Relative));
        }      
    }

2. Решение

    void OnTimerTick(object sender, EventArgs e)
    {
        ((DispatcherTimer)sender).Stop();
        NavigationService.Navigate(new Uri("/lvlSet1/s1lvl3.xaml", UriKind.Relative));
    } 

Дополнительная информация

MSDN: класс DispatcherTimer

1 голос
/ 22 декабря 2011

Попытка структурировать ваш код следующим образом.Is будет держать ваш объект таймера в области видимости, чтобы вы могли остановить его после первого тика.

class SimpleExample
{
    DispatcherTimer timer;

    public SimpleExample()
    {
        timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromSeconds(5);
        timer.Tick += new EventHandler(OnTimerTick);
    }

    public void SomeMethod()
    {
        timer.Start();
    }

    void OnTimerTick(object sender, EventArgs e)
    {
        timer.Stop();
        NavigationService.Navigate(new Uri("/lvlSet1/s1lvl3.xaml", UriKind.Relative));            
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...