Я хочу, чтобы мой метод подождал около 500 мс, а затем проверьте, не изменился ли какой-либо флаг. Как завершить это, не блокируя остальную часть моего приложения?
С# ждать некоторое время без блокировки
Ответ 1
Thread.Sleep(500)
заставит текущий поток ждать 500 мс. Это работает, но это не то, что вы хотите, если все ваше приложение работает в одном потоке.
В этом случае вы захотите использовать Timer
, например, так:
using System.Timers;
void Main()
{
Timer t = new Timer();
t.Interval = 500; // In milliseconds
t.AutoReset = false; // Stops it from repeating
t.Elapsed += new ElapsedEventHandler(TimerElapsed);
t.Start();
}
void TimerElapsed(object sender, ElapsedEventArgs e)
{
Console.WriteLine("Hello, world!");
}
Вы можете установить AutoReset
в true (или не устанавливать его вообще), если хотите, чтобы таймер повторялся.
Ответ 2
Я не совсем понимаю вопрос.
Если вы хотите заблокировать перед проверкой, используйте Thread.Sleep(500);
Если вы хотите проверять асинхронно каждые x секунд, вы можете использовать Timer
для выполнения обработчика каждые x миллисекунд.
Это не будет блокировать текущий поток.
Ответ 3
Этот метод работает в другом потоке, кроме остальной части вашего приложения, затем выполните следующее:
Thread.Sleep(500);
Ответ 4
Вы можете использовать await Task.Delay(500);
, не блокируя поток, например Sleep
, и с гораздо меньшим количеством кода, чем таймер.
Ответ 5
System.Threading.Thread.Sleep(500);
Обновление
Это не будет блокировать остальную часть вашего приложения, просто поток, который запускает ваш метод.
Ответ 6
Использование таймера должно сделать трюк
если вам нужно использовать поток, то вот пример
void Main()
{
System.Threading.Thread check= new System.Threading.Thread(CheckMethod);
check.Start();
}
private void CheckMethod()
{
//Code
Thread.Sleep(500);
}
Ответ 7
Асинхронная задача:
var task = new Task (() => function_test()); task.Start();
public void function_test() { `Wait for 5000 miliseconds` Task.Delay(5000);` }