如何在不使用睡眠的情况下添加2秒暂停?

时间:2014-04-20 23:51:24

标签: c# timer sleep wait thread-sleep

制作洗衣机控制程序,我想在我的线程中间有一个2秒计时器。这是为了代表洗涤'时间(显然在现实生活中大约30分钟,但我不想等那么久!),然后在2秒后继续线程。 我只是在锁定门和开始洗涤之间的暂停工作,这是我到目前为止所做的:

    // Door
            if (radioButtonDoor.Checked == false)
            {
                doorOpenLight.FillColor = Color.Red;
                doorOpen.FillColor = Color.Red;
                doorUnlocked.FillColor = Color.Red;
                doorClosed.FillColor = Color.Transparent;
                doorLocked.FillColor = Color.Transparent;
                doorLight.FillColor = Color.Transparent;
            }
            else if (radioButtonDoor.Checked == true)
            {
                doorOpenLight.FillColor = Color.Transparent;
                doorOpen.FillColor = Color.Transparent;
                doorUnlocked.FillColor = Color.Transparent;
                doorClosed.FillColor = Color.Red;
                doorLocked.FillColor = Color.Red;
                doorLight.FillColor = Color.SpringGreen;
                doorLockedImage.Visible = true;
                //2 second timer here
            }
        //Wash
            if (doorLight.FillColor == Color.SpringGreen)
            {
                textBoxTemp.Text = temp.ToString();
                washLight.FillColor = Color.SpringGreen;
            }

所有颜色变化只是向我的讲师展示机器所处的状态。 我不想睡​​觉,因为我需要能够在任何时候停止洗涤,所以这不会有用。 感谢

1 个答案:

答案 0 :(得分:1)

你要做的是让你的方法异步,这将允许你使用一个名为Task.Delay的方法,它类似于Thread.Sleep,但不是让线程进入休眠状态,而是将控制权返回给调用方法,在指定的时间结束后返回。

这要求您将方法标记为异步:

async Task FooMethod

在您的代码中,您将使用:

  private async void AwesomeButton_Click(object sender, EventArgs e)
  {
     doorLocked.FillColor = Color.Red;
     doorLight.FillColor = Color.SpringGreen;
     doorLockedImage.Visible = true;
     var cancellationToken = new CancellationTokenSource().Token;
     await Task.Delay(AmountOfMillisecondsHere, cancellationToken);
  }

然后,您可以调用cancellationToken.Cancel()来中止任务。