Диспетчер 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);
}