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

本文关键字:情况下 添加 2秒 暂停 | 更新日期: 2023-09-27 17:59:04

制作洗衣机控制程序,我希望在线程中间有一个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;
            }

所有的颜色变化只是为了向我的讲师展示机器的状态。我不想睡觉,因为我需要随时停止洗漱,所以这不会有用。感谢

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

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

这需要你做的是将你的方法标记为async:

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);
  }

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