2015-01-25 2 views
0

Я запускаю рутинный набор действий с таймером на C#.Приостановить таймер, если пользователь нажимает клавишу «Вверх» или «Вниз», возобновляет, когда они этого не делают

public MainWindow() 
{ 
    RefreshTimer(); 
} 

public void RefreshTimer() 
{ 
    var refreshTimer = new Timer(); 
    refreshTimer.Elapsed += (sender, e) => RefreshPlotList(sender, e); 
    refreshTimer.Elapsed += (sender, e) => RefreshWatchList(sender, e); 
    refreshTimer.Interval = 2000; 
    refreshTimer.Enabled = true; 
    } 

Как приостановить таймер, если пользователь нажимает клавишу вверх или вниз, а затем возобновить его после того, как ключ действие делается?

+0

Это становится тривиальным, когда вы делаете * нет * использование System.Timers.Timer. Это не имеет никакого смысла, когда вам нужно обновлять интерфейс после того, как отметит таймер. –

+0

@ ХансПасант - разве я пошел совсем по-другому? – methuselah

ответ

1

Когда пользователь нажимает клавишу, устанавливается логический флаг для записи факта, что теперь нажата клавиша. Удалите флаг, когда ключ освобожден.

Игнорировать события таймера, когда установлен флаг.

Или: Остановите таймер при нажатии клавиши, запустите его, когда клавиша отпущена. Это менее надежно, так как таймер может быть поставлен в очередь и поставлен после нажатия клавиши.

+0

Спасибо. Как я могу игнорировать события таймера, когда установлен флаг? Не могли бы вы показать мне пример, с которым я могу работать? – methuselah

+0

Добавьте 'if (keyIsPressed) return;' в обработчик (ы) таймера. – usr

+0

Это то, что я сделал до сих пор, я на правильном пути? http://pastebin.com/aw6wzBgJ – methuselah

Смежные вопросы