Если нажата ни одна клавиша, то событие KeyDown не будет поднято. Таким образом, ваш обработчик не будет вызван.
UPDATE (вариант с проходным удален, так как таймер будет делать то же самое для вас, как петля на другом потоке с тайм-аута сна):
Вот пример с таймером:
private bool _keyPressed;
private void TimerElapsed(object sender, EventArgs e)
{
if (!_keyPressed)
{
// do what you need
}
}
private void KeyDownHandler(object sender, KeyEventArgs e)
{
_keyPressed = true;
switch (e.KeyCode)
{
// process pressed key
}
_keyPressed = false;
}
UPDATE: Я думаю, что хорошо чтобы проверить, сколько раз прошло с момента последнего нажатия клавиши, прежде чем решить, не были ли нажаты никакие клавиши.
private DateTime _lastKeyDownTime;
private const int interval = 100;
private void LoadHandler(object sender, EventArgs e)
{
// start Threading.Timer or some other timer
System.Threading.Timer timer = new System.Threading.Timer(DoSomethingDefault, null, 0, interval);
}
private void DoSomethingDefault(object state)
{
if ((DateTime.Now - _lastKeyDownTime).TotalMilliseconds < interval)
return;
// modify UI via Invoke
}
private void KeyDown(object sender, KeyEventArgs e)
{
_lastKeyDownTime = DateTime.Now;
switch (e.KeyCode)
{
// directly modify UI
}
}
Что именно вы имеете в виду? Сделайте что-нибудь, если не произойдет какое-либо событие смены ключа в течение определенного времени? – alex
нет так, как это 'if (" keypress == nokey ") {system.threading.thread.sleep ***} ' – Fr0stY
a if-loop? можете ли вы попытаться объяснить свой вопрос более подробно, пожалуйста? –