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