保持 UI 响应的 Thread.Sleep 替代方案?

2024-04-19

我在 Visual Studio 2008 中使用 C# 完成所有这些工作。

我想放慢算法的工作速度,以便用户可以观看它的工作。 GUI 上有可见的周期性变化,所以我添加了Thread.Sleep每次实例之后。

问题是Thread.Sleep,当设置为至少一秒时,在几次实例之后Thread.Sleep(几次循环后)只是冻结整个 GUI 并保持这种状态直到程序完成。不是马上发生,但它总是会发生。多久取决于睡眠时间的长短。

我有证据表明整个程序不会冻结,它正在工作,甚至睡眠也会暂停正确的长度。但 GUI 在某个时刻冻结,直到算法结束,此时它显示正确的最终状态。

如何解决这个问题?在某个点暂停算法的替代方案?


首先,不要让用户在考虑工作何时完成之前就等待工作完成。没有用。请直接说不。

其次,您正在“休眠”UI 线程。这就是 UI 线程“锁定”的原因。 UI线程不能被阻塞;如果是,UI 线程无法更新表单上的控件并响应系统消息。响应系统消息是UI线程的重要任务;如果不这样做,您的应用程序就会显得被系统锁定。不是什么好事。

如果你想完成这个(请不要)只需创建一个Timer http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx当你开始做工作时Ticks http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.tick.aspx,表示是时候停止假装工作了。

再次强调,请不要这样做。

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

保持 UI 响应的 Thread.Sleep 替代方案? 的相关文章

随机推荐

  • 为什么带有子模块和名称冲突的函数的模块可以工作?

    这是我想知道的代码 mod a pub mod b pub fn b println b pub use self b b use a b fn main b b b 为什么b b 工作 模块不应该吗b和函数b冲突 这是否意味着a b不知何
  • 如何在 igraph R 中创建自循环?

    如何添加self loop除了改变之外的图表Adjacency matrix这正在改变c i i 1 有没有一个函数可以做到这一点igraph R包裹 Edit 图形创建 network read csv file choose netwo
  • pyaudio 可以同时演奏两个音符吗?

    可以使用 pyaudio 演奏和弦吗 当然 只需生成结果并将其传递给玩家即可 本文介绍了一种实现此目的的方法 http davywybiral blogspot com br 2010 09 procedural music with py
  • FMDB ios 没有这个表

    我正在做的 sqlite 项目有问题 我正在使用 FMDB 我遵循一个简单的示例 但不起作用 而且我找不到错误 我从终端创建了数据库模式 并在上面放置了一些数据 我对 ios 开发非常陌生 所以我不知道我是否正确执行了这些步骤 这就是我所做
  • Tkinter - 窗口焦点丢失事件

    是否有事件触发tkinter窗口失去可以绑定到的焦点tkinter窗口使用 bind method 您正在寻找的活动是
  • r 中的循环问题: if (length[i] == 1) { 中的错误:缺少 TRUE/FALSE 需要的值

    ann lt 1 2500 len lt sample 1 3 1000 replace TRUE df lt data frame col1 c 1 2500 col2 c 1 2500 for i in 1 length ann if
  • 运行包含 Pipes 的命令行并将结果显示到 STDOUT

    如何从 Python 调用包含管道的 shell 命令并捕获输出 假设命令类似于 cat file log tail 1 我想做的 Perl 等效项是这样的 my string cat file log tail 1 使用 subproce
  • 构建 nspredicate 时的 EXC_BAD_ACCESS

    我正在计算生日和今天之间的月数 利用这个数字 我正在构建一个谓词来从核心数据中获取对象 尽管月数计算正确 如日志所示 但在构建谓词时我得到了 EXC BAD ACCESS 这是我的代码 NSCalendar gregorian NSCale
  • 隐藏网站文件夹/目录文件的最佳方法是什么[重复]

    这个问题在这里已经有答案了 如果我通过 www mysite com img 访问我的网站 我会看到以下内容 父目录 folder1 folder2 file1 file2 等等等等 但什么是best如何阻止人们访问我的网站文件夹和文件结构
  • 处理负整数的汇编 MASM

    我被指示用汇编语言编写一个程序 该程序将执行以下算术 A B C D A E 当没有负值发挥作用时 我成功地做到了这一点 但假设 A 5 B 4 C 3 D 2 和 E 1 这给了我们 5 4 3 2 5 1 或 6 这就是我需要帮助的地方
  • 通过@PersitenceContext或@PersitenceUnit注入EntityManagerFactory?

    我一直认为 PersistenceContext用于将EntityManager注入到容器管理的应用程序中 而 PersistenceUnit用于注入EntityManagerFactory Javadoc 说 对于持久性单元 http d
  • 适用于 mac 的免费 c++ 编译器不使用 xcode

    有没有适用于 Mac 且不需要 xcode 的免费 C 编译器 如果您安装了开发人员工具 包括 Xcode 那么您也会安装 GCC 您可以从命令行使用它 gcc o myprogram main cpp
  • 更快的循环:foreach 与 some(jsperf 的性能与 Node 或 chrome 不同)

    将数组的值恢复为简单的最佳方法是什么true or false values 我很困惑 因为 jsperf 给了我VERY与 google chrome 控制台 nodejs 或任何其他 JS 引擎给我的结果不同 jsperf 片段在这里
  • Keycloak 20.0.2:我在用户角色映射中没有看到领域角色

    当我在我的领域中创建用户并单击 角色映射 选项卡时 根据我看到的每个 SO 帖子 应该有一种方法来选择要应用的领域角色 但就我而言 我没有看到他们 This is what I see 我正在尝试添加manage users角色 因此我可以
  • 升级数据库

    我已经在谷歌商店中有一个应用程序 我正在使用一个有 3 个表的内置数据库 并在第一次启动应用程序时复制它 现在我想升级应用程序并添加另一个表 下面是我的代码 public DataBaseHelper Context context sup
  • 导入错误:没有名为 psycopg2 的模块

    在 OpenERP 6 的安装过程中 我想使用以下命令生成一个配置文件 cd home openerp openerp server bin openerp server py s stop after init c home opener
  • windows下如何设置keytool的密码?

    我正在为 android 应用程序开发的 my hello mapview 程序添加 google maps api 参考网站 http developer android com guide tutorials views hello m
  • 我需要处置 SemaphoreSlim 吗?

    根据文档 a SemaphoreSlim不使用 Windows 内核信号量 是否有任何特殊资源被使用SemaphoreSlim这使得打电话很重要Dispose当 的时候SemaphoreSlim将不再使用 如果您访问AvailableWai
  • Java中如何正确计算字符串的长度?

    我知道有String length以及其中的各种方法Character它或多或少适用于代码单元 代码点 Java 中实际返回 Unicode 标准指定的结果的建议方法是什么 UAX 29 http www unicode org repor
  • 保持 UI 响应的 Thread.Sleep 替代方案?

    我在 Visual Studio 2008 中使用 C 完成所有这些工作 我想放慢算法的工作速度 以便用户可以观看它的工作 GUI 上有可见的周期性变化 所以我添加了Thread Sleep每次实例之后 问题是Thread Sleep 当设