如何在不使用睡眠的情况下添加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;
}
所有的颜色变化只是为了向我的讲师展示机器的状态。我不想睡觉,因为我需要随时停止洗漱,所以这不会有用。感谢
您要做的是使方法异步,这将允许您使用名为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()来中止任务。