Диспетчер WPF не останавливается и не перезапускается

Я хочу, чтобы DispatcherTimer перезагружался каждый раз, когда условия не выполняются. Только если условие if выполнено в течение 5 секунд, метод может продолжаться.

Как мне остановить Диспетчертимер? Переменная timeToWait установлена ​​в 3000, что работает как задумано.

Ниже приведен код на C#. Это не отвечает, как я хочу. Это только начинается, но никогда не останавливается и не перезапускается. Я делаю заявку в WPF.

dispatcherTimerStart = new DispatcherTimer();

    if (average >= centerOfPlayingField - marginOfDetection && average <= centerOfPlayingField + marginOfDetection)
    {
      dispatcherTimerStart.Interval = TimeSpan.FromMilliseconds(timeToWait);
      dispatcherTimerStart.Tick += new EventHandler(tick_TimerStart);
      startTime = DateTime.Now;
      dispatcherTimerStart.Start();
    } else
    {
      dispatcherTimerStart.Stop();
      dispatcherTimerStart.Interval = TimeSpan.FromMilliseconds(timeToWait);
    }


private void tick_TimerStart(object sender, EventArgs args)
{
  DispatcherTimer thisTimer = (DispatcherTimer) sender;
  thisTimer.Stop();
}

1 ответ

Вам нужно сохранить dispatcherTimer, который входит в ваш блок if, потому что в вашем блоке else вы останавливаете новый экземпляр DispatcherTimer, а не тот, который вошел в блок if.

взять поле уровня класса

DispatcherTimer preservedDispatcherTimer=null;



var dispatcherTimerStart = new DispatcherTimer();

        if (average >= centerOfPlayingField - marginOfDetection && average <= centerOfPlayingField + marginOfDetection)
        {
            **preservedDispatcherTimer = dispatcherTimerStart;**
            dispatcherTimerStart.Interval = TimeSpan.FromMilliseconds(timeToWait);
            dispatcherTimerStart.Tick += new EventHandler(tick_TimerStart);
            startTime = DateTime.Now;
            dispatcherTimerStart.Start();
        }
        //use preservedDispatcherTimer in else 

        else if(preservedDispatcherTimer!=null)
        {
            preservedDispatcherTimer.Stop();
            preservedDispatcherTimer.Interval = TimeSpan.FromMilliseconds(timeToWait);
        }
Другие вопросы по тегам