睡觉 - 直到c#

时间:2012-10-11 07:48:16

标签: c# thread-sleep

我想每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#的替代品。

将会使用任何示例代码。

3 个答案:

答案 0 :(得分:5)

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

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

有关详细信息,请参阅MSDN

答案 1 :(得分:3)

您可以使用Stopwatch来衡量时间。我也会改用For-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);
}

答案 2 :(得分:1)

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