我有一个控制灯光的Windows窗体程序。这种灯有其自己的类别。我可以做一些事情,例如将其关闭然后更改颜色等。这可以毫无问题地进行。但是,我想做的是使灯点亮特定的时间,即100毫秒或300毫秒(取决于使用情况)。
我曾尝试使用秒表来执行此操作,但是当我单击要执行此操作的按钮时,它将冻结程序。灯点亮,然后不熄灭,并且我无法使用要关闭的停止按钮。
该程序加载并初始化该灯,并显示一条警报,指出已完成并检测到一个灯。然后我用这个:
private void Red_Click_1(object sender, EventArgs e)
{
//Displays Red
System.Threading.Tasks.Task.Factory.StartNew((Action)delegate()
{
displayRedDot();
});
}
这是displayRedDot()
public void displayRedDot()
{
System.Diagnostics.Stopwatch clock1 = new System.Diagnostics.Stopwatch();
long elapsedTime = clock1.ElapsedMilliseconds;
clock1.Start();
while (elapsedTime < 100)
{
oBlynclightController.Display(BlynclightController.Color.Red);
}
oBlynclightController.Display(BlynclightController.Color.Off);
clock1.Stop();
}
我还有一些其他功能,它们在不同的时间是相同的,但我尚未在任何地方调用它,因为我无法使它正常工作。
最佳答案
您的代码将永远无法正常工作,因为您正忙于等待来阻塞UI线程。这是您的程序似乎死机的原因。改用计时器或异步/等待
async void DisplayRedDot(int duration)
{
oBlynclightController.Display(BlynclightController.Color.Red);
await Task.Delay(duration);
oBlynclightController.Display(BlynclightController.Color.Off);
}
关于c# - C#程序使用秒表卡住以对 Action 计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22141222/