我编写了一个客户端应用程序,我使用的是主线程以外的两个线程。后台线程用于通过TCP IP接收数据,而接收后我调用另一个线程,将使用for连续显示接收到的数据loop.But每次迭代后,for循环需要等待30秒。我使用了Thread.sleep(30000),但不知道为什么它不工作,有时它会在30秒之前从睡眠模式唤醒。我使用的是dot net框架4.请提出其他一些备选方案。
for(n=0;n<=m;n++)
{
//show data;
//wait for 30 seconds
}
答案 0 :(得分:3)
计时器在.NET中不准确。你可能不会完全得到30000。
您可以使用Thread.Sleep(30000
);或await Task.Delay(30000)
,但您需要将方法标记为async
;
区别在于Thread.Sleep
阻止当前线程,而Task.Delay则不阻止。
public async Task MyMethod()
{
int n;
int m = 100;
for(n=0; n<=m; n++)
{
//show data;
//wait for 30 seconds
await Task.Delay(30000);
}
}
对于.NET 4,您可以使用此alternative:
public static Task Delay(double milliseconds)
{
var tcs = new TaskCompletionSource<bool>();
System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += (obj, args) =>
{
tcs.TrySetResult(true);
};
timer.Interval = milliseconds;
timer.AutoReset = false;
timer.Start();
return tcs.Task;
}