使用c#的tickcount延迟程序

时间:2016-03-16 01:28:50

标签: c# visual-studio

所以我希望暂停程序5秒钟,然后继续执行程序的其余部分。这是我到目前为止的要点。

tickerStart = System.Environment.TickCount;

do
{
//this is part of my own library, it generates a shape in a different window
numbers.AddText(Convert.ToString(number), 100);
}
while (tickerStart < 5000);


numbers.AddRectangle(0, 0, 800, 600, Color.Black);
//This last line simply clears the screen
Console.Readkey();

基本上,我想在不同的窗口中生成一些文本,然后想在5秒后清除它。

1 个答案:

答案 0 :(得分:0)

在您在问题中提供的代码中,您没有更新tickerStart,因此while循环中的条件永远不会改变。

作为基本修复 - 但不推荐 - 你应该这样做:

tickerStart = System.Environment.TickCount;

do
{
    numbers.AddText(Convert.ToString(number), 100);
}
while (System.Environment.TickCount - tickerStart < 5000);

numbers.AddRectangle(0, 0, 800, 600, Color.Black);

但是,建议不要使用此代码,因为它会阻止UI线程,因此在代码运行时UI不会更新。

相反,你需要使用某种计时器来完成这项工作。

我建议使用Microsoft的Reactive Framework(NuGet“Rx-WinForms”或“Rx-WPF”)。我假设使用此代码的Winforms:

Observable
    .Timer(TimeSpan.Zero, TimeSpan.FromSeconds(0.1)) //start immediately, then every 0.1s
    .Take(50) // 5 seconds = 50 x 0.1s
    .ObserveOn(this)
    .Subscribe(
        n => numbers.AddText(Convert.ToString(number), 100), //each timer tick
        () => numbers.AddRectangle(0, 0, 800, 600, Color.Black)); //at end

如果您使用的是WPF,则.ObserveOn(this)会更改为.ObserveOnDispatcher()

请注意 - 这不会延误您的计划。如果您确实尝试延迟UI将不会更新。因此,您需要将代码需要的代码放在() => { /* finally */}代码块中。