C# 程序使用秒表来计时操作时冻结

2023-12-02

我有一个控制灯的 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(使用前将#替换为@)

C# 程序使用秒表来计时操作时冻结 的相关文章

随机推荐

  • javascript中switch case跳转到错误的case(如何正确使用break命令)

    我的代码不太长 所以我将其全部粘贴到这里 代码不完整 但当我运行它时 它首先跳转到它应该的情况 开始 然后跳转到情况 结束 我可以看到它 因为它打印了两个块的控制台日志文本 为什么会跳到 结束 案例
  • 是否可以将 Google Sheets API 配额限制提高到每个帐户 2500 个和每个用户 500 个以上?

    问题 遇到 Google Sheets API 读 写配额限制 具体来说 每 100 秒读 写请求 and 每个用户每 100 秒的读 写请求配额 一些背景 在过去的几个月里 我一直在为我们学区的学生和教职员工开发一个网络应用程序 该应用程
  • Sin(int) 在 Xcode 调试器 (lldb) 中被破坏

    我有一个针对 iOS SDK 6 1 的通用 iOS 应用程序 编译器设置为苹果 LLVM 编译器 4 2 当我在代码中放置断点并运行以下命令时 我得到了奇怪的结果sin int 以供参考 sin 70 0 7739 70 的单位是弧度 l
  • 最佳实践:301 将 HTTP 重定向到 HTTPS(标准域)

    我一直在寻找完美的 301 重定向 但我找到了很多解决方案 但不知道什么是最好的 这就是我想做的 http 域名 tld https 域名 tld http www domain tld https 域名 tld https www dom
  • AVX512 舍入模式如何工作(或者 NDISASM 只是混淆了)?

    我正在尝试了解具体的AVX512F指令vcvtps2udq 指令的签名是VCVTPS2UDQ zmm1 k1 z zmm2 m512 m32bcst er 手册信息如下 为了尝试理解新的舍入模式 以下代码片段是用 NASM 2 12 02
  • 无法在 Centos 上使用 Diazo (plone.app.theming)

    我使用 plone4 1 和 Diazo 在我的 mac 上制作了一个门户网站 现在 我正在尝试将其部署在我的服务器 CentOs 上 其中还有另一个带有 plone4 0 5 Collectivexdv 的站点 当我使用我的重氮主题运行该
  • 在页面加载时自动记录并保存 Chrome 开发者工具分析数据?

    Chrome 开发者工具在 时间轴 选项卡上提供了一个选项 可以开始 停止记录与内存 绘画 屏幕截图 JS 配置文件相关的分析数据 一旦刷新页面 录制就会自动开始 并在页面加载后停止 有没有办法 1 自动在后台开始录制不需要 在 chrom
  • 如何从 Excel 工作簿中选取值并按活动工作簿上的函数返回它们

    我的目标是实现一些功能 我给它们提供电动机的功率 频率和速度参数 并查看另一个工作簿 其中我有电动机数据 并返回尺寸 轴直径和其他电动机详细信息 由于我还没有掌握太多 VBA 所以我尝试实现一个函数 该函数只需转到另一个工作簿中的单元格并返
  • 通过纹理偏移滚动 2D/3D 背景

    我一直在尝试在 Unity 中使用四边形来显示纹理来制作无限滚动的 2D 背景 我的想法是根据玩家的位置改变四边形的偏移 由于某种原因 当我更改偏移量时 我的图像无法正确重复 并且一旦达到偏移量 2 图像就会完全消失 纹理上 3 个不同 x
  • JSON 和处理未导出的字段

    是否有技术原因导致未导出的字段不被encoding json包含 如果不是 并且这是一个任意决定 即使未导出 是否还可以包含额外的后门选项 例如 要求导出客户端代码以获得此功能感觉很不幸 特别是如果小写字母提供封装或编组结构的决定比它们的设
  • 在 Google 文档中的某些文本后附加列表项的更有效方法

    所以目前 我有一些代码可以让我插入ListItem在 Google 文档中的一段之后 我遇到的唯一问题是 对于我想要完成的任务来说 它似乎过于复杂 这是我的代码 var search This is a test var body Docu
  • 如何保持 .NET 控制台应用程序运行?

    考虑一个在单独线程中启动某些服务的控制台应用程序 它所需要做的就是等待用户按 Ctrl C 将其关闭 以下哪项是执行此操作的更好方法 static ManualResetEvent quitEvent new ManualResetEven
  • 在Python中对大量数组进行排序的最快方法

    我正在尝试在 python 中对大量数组进行排序 我需要一次对超过 1100 万个数组执行排序 另外 如果我可以直接获取对数组进行排序的索引 那就太好了 这就是为什么 到目前为止我正在使用 numpy argsort 但这在我的机器上太慢了
  • C# 代码覆盖率指标

    是否有免费的商用代码覆盖率工具 低至个人 LOC 级别 可用 我知道 VS2008 Team Edition 但不幸的是没有预算购买许可证 所以我正在寻找一种免费的 如啤酒 替代品 有任何想法吗 NCover是 NET 的开源代码覆盖工具
  • 为什么 N3421 不提供 noexcept 限定符?

    In N3421 使运算符函子变得更大 std 函数对象的新特化是 template lt gt struct plus
  • xsd:dateTime 到 Java OffsetDateTime

    为了妥善处理xs 日期时间使用 JAXB 我必须编写自己的转换器String gt java time OffsetDateTime 正如 XML 架构定义中提到的 dateTime 受到 ISO 8601 的启发 我使用OffsetDat
  • SocketIO:通过套接字ID断开客户端连接?

    我有一个带有 SocketIO 和多个连接的节点服务器 如何根据 ID 断开现有套接字 有房间 每个房间都有一个管理员和其他连接 我的目标是使管理套接字能够根据其 ID 使任何其他套接字断开连接 解决方法是向要被踢出的客户端发送一条消息以
  • valgrind:mmap(0x600000,8192)在UME中失败,错误12(无法分配内存)

    我正在关注这个练习 此页面包含安装 Valgrind 3 6 1 的说明 但我当前的 Linux 内核版本不支持此版本的 Valgrind 因此 我安装了 Valgrind 3 11 0 并在运行此命令后按照说明进行操作 valgrind
  • Grails Gorm 如何为每个具体类插入表,其中每个具体类都继承一个抽象类

    大家好 以下是情况 我有一个抽象类 AbstractProfile 和一个具体类 GoogleProfile abstract class AbstractProfile class GoogleProfile extends Abstra
  • C# 程序使用秒表来计时操作时冻结

    我有一个控制灯的 Windows 窗体程序 这种光有自己的类别 我可以做一些事情 比如打开和关闭它 改变颜色等 我可以毫无问题地做到这一点 然而 我想要做的是让灯持续特定的时间 即 100 毫秒或 300 毫秒 取决于使用情况 我尝试使用秒