如何在.net中保持2-3秒的过程?

时间:2016-03-05 12:49:52

标签: c# .net multithreading timer

我有布尔变量。我有基于此布尔值的计时器。两者都有不同的形式。表单初始化时,Boolean为True。它在特定条件下设置为false。我想在设置为false之前保持2-3秒。

//Form 1

Private void updateGrid()
{
    if(Form2.isBooleanTrue)
    {
        //Code to execurte
    }
}


//Form 2
public static isBooleanTrue = false;
Private void checkCondition()
{
    // I want to hold here. Note it should not hold the Form1 process
    isBooleanTrue = true;
}

任何正文都可以建议我如何在布尔值设置为false之前保持进程?所以,计时器可以运行几秒钟。

2 个答案:

答案 0 :(得分:2)

您可以使用Thread.Sleep,它会在给定的时间段内暂停当前线程。

Thread.Sleep(3000); // 3 sec wait.

<强>更新

要让UI响应并在几秒钟后获得更新,您可以在下面执行此操作。

this.Invoke((MethodInvoker)delegate {

    Thread.Sleep(3000); 
    // run your code on UI thread
});

另一个选项是,启动执行操作的 asynchoronous Task

Task.Factory.StartNew(()=>
{
    Thread.Sleep(3000); // wait 3 secs
    form1.Invoke(new Action(()=> 
               {
                    // your logic goes here.
               }));
});

答案 1 :(得分:1)

如果您使用C#5或更高版本运行.NET 4.5或更高版本,则可以使用async / await功能。

将您的方法标记为async并且(如果可能,不必要但建议)将其返回类型更改为Task。然后,您可以使用Task.Delay使您的UI线程等待您想要的任何时间。

重要的是它将等待异步,因此它不会冻结您的UI,不像您使用Thread.Sleep,而是它将从您的方法返回并继续执行其他代码。 3秒后,它会将该方法的其余部分作为任务延续运行,这将更新您的isBooleanTrue字段。

您的方法现在应如下所示:

private async Task checkCondition() // If you can't change the return type you can leave it as void, although it's not recommended.
{
    await Task.Delay(3000);
    isBooleanTrue = true;
}

请注意,即使返回类型为Task,该方法也不会返回任何内容。这是新的async / await语法的一个特性,将自动生成返回的Task

您可以详细了解here