C# 不使用Thread.sleep()的情况下的时间延迟

C# 不使用Thread.sleep()的情况下的时间延迟,c#,.net,multithreading,multidimensional-array,C#,.net,Multithreading,Multidimensional Array,我编写了一个客户端应用程序,其中我使用两个线程而不是主线程。后台线程用于通过TCP IP接收数据,在接收到数据后,我调用另一个线程,该线程将使用for循环连续显示接收到的数据。但是在每次迭代之后,for循环需要等待30秒。我使用了thread.sleep(30000),但不知道为什么它不工作,有时它会在30秒前从睡眠模式中醒来。我使用的是dot net framework 4。请建议其他选择 for(n=0;n<=m;n++) { //show data; //wait f

我编写了一个客户端应用程序,其中我使用两个线程而不是主线程。后台线程用于通过TCP IP接收数据,在接收到数据后,我调用另一个线程,该线程将使用for循环连续显示接收到的数据。但是在每次迭代之后,for循环需要等待30秒。我使用了thread.sleep(30000),但不知道为什么它不工作,有时它会在30秒前从睡眠模式中醒来。我使用的是dot net framework 4。请建议其他选择

 for(n=0;n<=m;n++)
 {
   //show data;
   //wait for 30 seconds
 } 

for(n=0;n计时器在.NET中不准确。您可能无法准确获取30000个计时器

您可以使用
Thread.Sleep(30000
)或
wait 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);
    }
}
公共异步任务MyMethod()
{
int n;
int m=100;
对于(n=0;n
{
tcs.TrySetResult(真);
};
时间间隔=毫秒;
timer.AutoReset=false;
timer.Start();
返回tcs.Task;
}

我不能使用Task.Delay(),因为我使用的是.Net Framework 4,而Task.Delay()在Framework 4中使用。5@SubhodeepBhattacharjee检查一下编辑谢谢先生,这张很好用非常感谢:)您在.net 4中没有Wait,因此延迟的第二个版本不能在for循环中使用。您有几个选项。如果您不喜欢
任务,您甚至可以使用DateTime和循环编写自己的tímer。延迟
线程。睡眠
。还有
计时器
-类,它们可能会对您有所帮助。没有任何指示如何等待30秒,你希望我们知道出了什么问题吗?如果你对没有显示预期行为的代码有问题,请发布代码。正如我所说,我在那里使用了Thread.Sleep()。我的代码看起来像-for(n=0;n
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;
}