Обработчик события таймера продолжает вызываться? - PullRequest
1 голос
/ 21 марта 2012

Кажется, у меня есть проблема с потоком, я думаю, я написал таймер для возврата на главный экран, если он появляется на любом другом экране в течение 5 секунд. Этот код работает нормально при первом вызове ResetScreen(), но после того, как он возвращается к самому главному экрану, я не могу перейти ни к какому другому экрану, поскольку он продолжает возвращаться к обработчику событий Timer.

Я также проверил это без this.Dispatcher.Invoke и заменил его на окно сообщения, и оно постоянно всплывает примерно каждую секунду.

private void ResetScreen()
{
    if (!mainScreen)
    {
        myTimer = new System.Timers.Timer();
        myTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
        myTimer.Interval = 5000;
        myTimer.Start();
    }
}

private void OnTimedEvent(object source, ElapsedEventArgs e)
{
    myTimer.Stop();
    this.Dispatcher.Invoke((Action)(() =>
    {
        // show main screen
    }));    
}

Edit: Я думаю, что это просто проблема таймера в целом. Просто не могу остановить таймер.

1 Ответ

3 голосов
/ 21 марта 2012

При использовании System.Timers.Timer() вам необходимо явно установить для свойства AutoReset значение false:

myTimer = new System.Timers.Timer();
myTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
myTimer.Interval = 5000;
myTimer.AutoReset = false;
myTimer.Start();

Ознакомьтесь с документацией и примерами на MSDN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...