我有一个控制灯的 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/await 代替
async void DisplayRedDot(int duration)
{
oBlynclightController.Display(BlynclightController.Color.Red);
await Task.Delay(duration);
oBlynclightController.Display(BlynclightController.Color.Off);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)