Подтвердить что ты не робот

С# ждать некоторое время без блокировки

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

4b9b3361

Ответ 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);` }