C# Windows 窗体 Thread.Sleep() 不起作用?

2023-12-10

 switch (Pattern[i])
        {
            case "Blue":
                blueButton.BackColor = Color.LightBlue;
                Thread.Sleep(1000);
                blueButton.BackColor = Color.Red;
                break;
            case "Lime":
                limeButton.BackColor = Color.Aquamarine;
                Thread.Sleep(1000);
                limeButton.BackColor = Color.Red;
                break;
            case "Yellow":
                yellowButton.BackColor = ColorTranslator.FromHtml("#FFFF80");
                Task.Delay(1000).Wait();
                yellowButton.BackColor = Color.Red;
                break;
            case "Red":
                redButton.BackColor = Color.Pink;
                Task.Delay(1000);
                redButton.BackColor = Color.Red;
                break;
        }    

但根本没有延迟……它只是跳过。我尝试同时使用 Task.Delay 和 Thread.Sleep 但它们实际上都没有延迟。另外,我是一名新程序员,所以请放轻松。


Thread.Sleep确实按预期延迟执行,但您在打印 UI 的同一线程上运行此代码,因此没有可见的更新。

一个简单的解决方法是Task.Delay(您需要将该函数标记为async):

 case "Blue":
     blueButton.BackColor = Color.LightBlue;
     await Task.Delay(1000);
     blueButton.BackColor = Color.Red;
     break;

要将函数标记为异步,请添加async函数调用的关键字

 private async Task showPattern(List<string> Pattern)

您应该阅读一些有关 Windows GUI 线程的基础知识和异步编程.

UI 线程的非常基本的解释: 你打电话时Form.Show or Form.ShowDialog应用程序正在启动所谓的消息循环。该消息循环确实处理所显示窗口的鼠标和键盘事件。该消息循环也处理窗口的绘制。因此,如果该线程被锁定,您的应用程序将变得无响应。按钮单击处理程序(以及窗口的所有其他处理程序)均由同一线程处理。如果您阻止此处理程序之一的执行(就像您所做的那样)Thread.Delay)窗口在这段时间内没有响应(不处理事件并且不重绘)。

为了解决这个问题,一个解决方案是与async and await。这两种方法做了很多编译器魔法,使这项工作如人们所期望的那样(检查链接以获取更多信息,你绝对应该!)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# Windows 窗体 Thread.Sleep() 不起作用? 的相关文章

随机推荐

  • 定期运行 JavaScript 函数

    我目前正在建立一个网站来托管软件 我想要的是在项目页面中添加循环截图的幻灯片 大约每 5 秒更改一次图像 有没有办法仅使用 JavaScript 在一定时间间隔触发脚本 或者我是否必须采用替代方法来实现我想要的功能 预先感谢您的任何帮助 s
  • Typescript 类型、泛型和抽象类

    我尝试了一种对我来说似乎很奇怪的行为 让我们考虑以下示例 在 Typescript Playground 中测试它 abstract class FooAbstract abstract bar class Foo extends FooA
  • MonoTouch“无法 AOT 程序集”

    我正在使用 MonoTouch 6 2 并且我有一个应用程序可以在模拟器上构建并运行良好 但当我为实际设备构建时 会出现 无法 AOT 程序集 错误 有没有人见过这个 这是编译器的输出 Applications Xcode app Cont
  • 在 Tomcat 上运行 JasperViewer 作为 Web 应用程序的一部分

    我了解到贾斯珀浏览器 默认预览组件贾斯珀报告 is a Swing组件 那么有什么方法可以将其转换或嵌入到Web应用程序中吗 有人说我应该使用Java网络启动 但据我所知这个链接 JWS在客户端计算机上下载并安装应用程序非常有用 但这不是我
  • 如何禁用特定控件的视图状态?

  • jquery 显示 [object object] 而不是数组 [重复]

    这个问题在这里已经有答案了 只是试图在视图中显示我通过 ajax 从控制器获取的数组 但它显示 object Object object Object 而不是数组 请检查我的js文件如下 faq title click function v
  • 如何在 PHP 中循环使用十六进制颜色代码?

    我想要一个数组 其中数组中的每个字段都包含一个颜色代码 array 0 gt 4CFF00 1 gt FFE97F 我希望它能够经历从绿色到黑色的整个颜色范围 绿色 gt 蓝色 gt 深蓝色 gt 紫色 gt 黄色 gt 橙色 gt 红色
  • 前面带有“0”的数字文字[重复]

    这个问题在这里已经有答案了 Using insert 我将值推入Array as myarray 22 33 44 myarray insert 0 02 gt 2 22 33 44 如果执行以下操作 我得到 myarray insert
  • 获取数组中特定项目的索引

    我想检索数组的索引 但我只知道数组中实际值的一部分 例如 我在数组中动态存储作者姓名 author xyz 现在我想找到包含它的数组项的索引 因为我不知道值部分 这个怎么做 您可以使用查找索引 var index Array FindInd
  • javascript 创建日期错误的月份

    使用 Mozilla Firefox Firebug var myDate new Date 2012 9 23 0 0 0 0 myDate 日期 2012 年 10 月 23 日星期二 00 00 00 GMT 0400 东部夏令时间
  • 如何验证机器人是否正在输入信息

    我有一个网络表单 用户填写该表单并将信息发送到服务器并存储在数据库中 我担心机器人可能只是填写表格 而我最终会得到一个充满无用记录的数据库 如何防止机器人填写我的表格 我在想也许类似于 Stackoverflow 的机器人检测 如果它认为你
  • 如何在 Ubuntu 16.04 上使用带有 Python 3.7 的 sqlite3 python 模块的 FTS5 扩展?

    为了测试带有 sqlite3 Python 模块的 FTS5 扩展是否有效 我使用了这个code from 技术进步 import sqlite3 conn sqlite3 connect memory conn execute creat
  • 在javascript中将输入框滚动到光标位置

    我编写了一个简单的 JS 函数 当输入框接收焦点时 它将光标置于输入框内容的末尾 框中最常见的操作是追加 我没有在 IE 中检查过 但是当文本多于可见文本时 即使将光标移动到输入末尾也不会在 Firefox 3 6 中将视图滚动到输入末尾
  • MacOS 上列表中的 SwiftUI 键盘导航

    我正在尝试实现一个可以使用箭头键 向上 向下 导航的列表 我已经创建了布局 但现在我不完全理解如何 以及在 哪里 拦截向上 向下键 以便我可以添加自定义逻辑 我已经尝试过了onMoveCommand with focusable但这不起作用
  • 从 Hive 表将 DataFrame 中的 ArrayBuffer 转换为 HashSet 到 RDD 时出现 GenericRowWithSchema 异常

    我有一个镶木地板格式的 Hive 表 是使用生成的 create table myTable var1 int var2 string var3 int var4 string var5 array
  • 使用 AJAX 加载 Bootstrap 弹出窗口内容。这可能吗?

    我尝试过的适当部分在这里 a href Click here a button popover html true button click function this popover show my popover load my stu
  • 使用具有各种引号级别和空格的变量构建命令字符串

    我有一个运行的脚本curl 我希望能够有选择地添加 H参数 如果字符串不为空 复杂的是引用和空格的级别 caption Test Caption if caption then CAPT H X Caption caption fi cur
  • android 更改图像按钮背景

    我似乎无法更改图像按钮的背景图像 这是我当前尝试使用的代码 ImageButton imgButton ImageButton findViewById R id showSportsButton imgButton setBackgrou
  • MySQL 中违反 1NF

    MySQL supportsJSON 数据类型 是否违规1NF rule为了字段的原子性 如果不是 那么它的合理性如何 这取决于数据在 RDBMS 中的使用方式 而不仅仅是数据类型本身 以及是否有任何数据 不仅仅是 json 违反 1NF
  • C# Windows 窗体 Thread.Sleep() 不起作用?

    switch Pattern i case Blue blueButton BackColor Color LightBlue Thread Sleep 1000 blueButton BackColor Color Red break c