定时器在.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;
}
您有几种选择。如果你不喜欢'Task.Delay'或'Thread.Sleep',你甚至可以使用DateTime和Loop来写你自己的游戏。还有'定时器'类,这可能会帮助你。 – Jannik
没有*任何*表示*如何*你等待30秒,你期望我们知道什么是错的?如果您在代码中没有显示预期行为方面的问题,请发布代码**。 – nvoigt
正如我所说我在那里使用了Thread.Sleep()。我的代码看起来像 - for(n = 0; n <= m; n ++) {show data; Thread.Sleep(30000); } –