6

我想每隔 1 秒定期运行一个函数,所以 10 秒后它会执行 10 次。最简单的方法是使用这样的循环:

while(true)
{
Thread.Sleep(1000);
function();
}

但是这种方法的主要问题是它不会提供任何定期保证。我的意思是,如果运行 function() 需要 0.1 秒,那么函数的执行时间将是这样的: 0, 1.1 , 2.2, 3.3, 4.4 , ...

我记得,在实时语言 ADA 中,我们有一个函数 sleep-until(#time)。现在我正在寻找 C# 中的替代方案。

任何示例代码都将被应用。

4

3 回答 3

7
System.Threading.Timer timer = new System.Threading.Timer(ThreadFunc, null, 0, 1000);

private static void ThreadFunc(object state)
{
    //Do work in here.
}

有关详细信息,请参阅MSDN

于 2012-10-11T07:53:02.013 回答
3

你可以用它Stopwatch来测量时间。我也会用 aFor-Loop代替。

var sw = new System.Diagnostics.Stopwatch();
var timeForOne = TimeSpan.FromSeconds(1);
var count = 10;
for(int i = 0; i < count; i++)
{
    sw.Restart();
    function();
    sw.Stop();
    int rest = (timeForOne - sw.Elapsed).Milliseconds;
    if (rest > 0)
        System.Threading.Thread.Sleep(rest);
}
于 2012-10-11T07:56:33.343 回答
1

要在特定时间间隔后调用某些内容,您应该使用 Timer 类。这是教程

于 2012-10-11T07:51:56.507 回答