c# - C#程序使用秒表卡住以对 Action 计时

标签 c# .net winforms

我有一个控制灯光的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/

相关文章:

c# - 将配置的选项实例注入(inject)作用域服务的最佳方法是什么?

c# - 从列表中返回特定类型

c# - 在用户控件 wpf 中访问按钮的属性

.net - Application.Exit 没有杀死消息泵?

c# - 将表单背景色设置为自定义颜色

c# - 为什么 .Net 的 MS 不更开放?

javascript - 按钮单击事件后更新 UpdatePanel

c# - 带有 checkBoxEdit 列的 DevExpress XtraGrid 控件

c# - Windows 加密容器有多安全?

c# - IPv4 映射的 IPv6 地址