制作洗衣机控制程序,我想在我的线程中间有一个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;
}
所有颜色变化只是向我的讲师展示机器所处的状态。 我不想睡觉,因为我需要能够在任何时候停止洗涤,所以这不会有用。 感谢
答案 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()来中止任务。