Мне нужно отложить выполнение моей программы на указанное количество миллисекунд, но я также хочу, чтобы пользователь мог избежать ожидания при нажатии клавиши. Если ни одна клавиша не нажата, программа должна ждать указанное количество миллисекунд.
Я использовал Thread.Sleep
для остановки программы (что в контексте моей программы, я думаю, нормально, поскольку пользовательский интерфейс настроен на минимизацию во время выполнения основного метода).
Я думал о том, чтобы сделать что-то вроде этого:
while(GetAsyncKeyState(System.Windows.Forms.Keys.Escape) == 0 || waitTime > totalWait)
{
Thread.Sleep(100);
waitTime += 100;
}
Поскольку Thread.Sleep
будет ждать до , по крайней мере, времени, указанного перед пробуждением потока, очевидно, будет большая нежелательная дополнительная задержка, поскольку она увеличивается в цикле while.
Есть ли какой-нибудь метод, который будет спать в течение определенного периода времени, но только когда условие выполняется? Или приведенный выше пример является «правильным» способом сделать это, но использовать более точный метод Sleep? Если да, то какой метод я могу использовать?
Заранее спасибо за помощь.
Редактировать ---- Возможная идея ...
DateTime timeAtStart = DateTime.Now;
int maxWaitTime = 15000;
while (true)
{
if (GetAsyncKeyState(System.Windows.Forms.Keys.Escape) != 0)
{
break;
}
if ((DateTime.Now - timeAtStart).TotalMilliseconds >= maxWaitTime)
{
break;
}
}
Это не использует какой-либо таймер, но похоже, что он может работать, какие-либо предложения?
Редактировать 2: Вышеприведенное работает для меня и теперь позволяет мне прервать ожидание при нажатии клавиши escape. Я заметил, что задержка более точная, чем при использовании Thread.Sleep
!