问题标签 [doevents]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delay - .Net 4.5 和 Task.Yield vs Task.Delay 作为 DoEvents 的替代品?使用哪个?
我一直在阅读 .Net 4.5 中引入的 async/await 语法并有所了解。
我找到了简单的示例,其中 Task.Yield 是要走的路,而不是 Application.DoEvents。我尝试了其中一个样本(填空)
带有 1 个按钮的 Form1 上的代码:
但是,运行此代码时,UI 线程被阻塞,或者我认为它被阻塞,因为在代码运行时我无法移动窗口。如果我注释掉 Task.Yield() 并改用 Task.Delay(1) 行,则 GUI 会响应。
那么我在这里误解了什么吗?我知道使用 DoEvents 等是不好的做法,但我有一些我负责的遗留代码使用它,我的目标是用 Yield 替换它,因为它是最佳选择。但首先我需要用 async/await 暖和起来。
c# - 使用 DoEvents 在 Outlook 加载项中挂起进度对话框
背景:
我在 Outlook 加载项中使用一个简单的进度对话框来显示执行长时间操作的进度。由于我无法在单独的线程中运行使用 Outlook 对象的代码,因此我无法实现更传统的后台工作进程。我的加载项一直工作正常,直到 Outlook 2013 在某些情况下我的进度对话框挂起。当我在 VS 调试器中运行加载项并导致挂起,然后中断时,它似乎卡在尝试强制更新进度条的 DoEvents() 行上。
我的问题:
有人可以建议一个更好的系统来显示上述限制的进展(长时间运行的代码必须在主 Outlook 线程中运行)。有没有更好的方法可以在不使用 DoEvents() 的情况下使进度对话框响应?
下面的简单代码演示了我现在是如何做到这一点的。在对 Outlook 对象执行长操作的加载项代码中:
这是简单进度对话框窗口的代码:
c# - 等待 .NET 线程启动的正确方法是什么?
我在微软网站的线程教程中阅读了以下内容:
http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx
MSDN 建议使用以下方法等待线程变为活动状态:
这是推荐的等待方式吗?插入“DoEvents”调用以允许主线程保持响应会更好吗?如果出现问题并且线程永远不会“活着”,应该如何进行错误处理?如果这是不好的做法,什么时候最好使用 IsAlive?
一些版主已将此标记为重复,但他们引用的另一个问题没有提及有关 IsAlive、DoEvents 或线程无法启动时的正确错误处理的任何内容。我的问题与我在问题中链接到的 MSDN 文章及其建议使用 IsAlive 的繁忙循环特别相关。
vba - DoEvents、等待和编辑
我有一组代码,其中包含:
这实际上是将宏从凌晨 3 点(当它完成运行代码时)到早上 7 点(应该恢复时)暂停了四个小时的窗口。代码本质上是一个无限循环。
我希望用户能够在那段时间内控制编辑某些单元格。我努力了
但是还没有找到保持宏运行的方法,但是在宏除了等待什么都不做的时候为用户提供控制。
任何见解将不胜感激。谢谢!
编辑:
还有一个后续问题。我创建了这个宏来引用实际的宏“Production_Board”。我希望这个宏一直运行并尽可能频繁地刷新。通过再次使用 goto startagain,由于“ontime”延迟间隔,它甚至在宏启动之前尝试再次启动宏。
我怎样才能让子 RunMacro 在宏“Production_Board”完成的第二秒重新启动?
multithreading - 如果前一个滴答仍在运行,则执行旧版 VB6 计时器滴答堆栈或跳过
我们有一个(非常)用 VB6(15 岁?)编写的旧版应用程序。
该应用程序包含一个间隔为 300 毫秒的计时器。当计时器计时时调用的 Sub 执行一批与一些 SQL 服务器对话的代码,打印一些标签等等。
当一切正常时,这个 Sub 在 5ms 到 10ms 内执行 - 即在下一个计时器间隔发生之前 - 但它也在下一个滴答声之前浪费了 290ms。
我们需要让这个应用程序更快一点,一个选择是将间隔更改为 1ms - 在我们这样做之前,我想确认计时器是否会中止间隔(又名 - 完全忽略滴答声)如果前一个间隔仍在执行 - 或者它会开始构建对子的调用堆栈,导致一段时间后挂起?(我当然假设所有滴答声都在与 gui 相同的线程中执行 - 因此我们需要在每次滴答声后使用 DoEvents 以确保 UI 不会挂起。)
我已经尝试过对此进行调查,但要找到有关旧 VB6 计时器的可靠信息证明是很棘手的。
我们确实安排了这个计划,以便使用线程和后台工作线程在 .net 中重新编写——这只是我们正在研究的一个短期修复。
c# - Application.DoEvents() 并在某些机器上冻结
我有一个调用 Application.DoEvents() 的 winforms 应用程序。现在应用程序在调用此方法时冻结(不足为奇)。
但是,这只发生在某些机器上。公平地说这是由于机器本身还是仍然取决于代码/application.doevents()?在这种情况下,应该将其重构为使用 backgroundworker。
这是机器/环境问题还是使用后台工作人员的机会?
java - 在 Java Swing GUI 中立即输出文本的正确方法
这样一段代码:
应在每次调用后立即将每条消息输出到LogBox
( JTextArea
) ,但仅在完成时输出。log
URL ... accepted
URLConnectionReader.getText(url)
有几种方法可以立即输出:
- Visual Basic 6 和 .NET 中的 Application.DoEvents
- Delphi 中的 Application.ProcessMessages
有没有一些简单的方法可以立即输出?我正在研究有关 DoEvents 以及如何在 Java 中执行此操作的问题,但我认为从多线程开始学习 Java 不是正确的方法。
c# - SerialPort 控制器的多线程安全使用
我已经阅读了数十篇关于 c# 和 Application.DoEvents() 中的线程的文章......仍然无法正确使用它来完成我的任务:我有一个连接到我的 COM 的控制器,这个控制器在命令上工作(我发送命令,需要等待几毫秒才能得到响应),假设响应是我想使用循环绘制每个时间间隔的数据:
- 开始我的循环。
- 通过 serialPort 向控制器发送命令。
- 等待响应(等待 20 毫秒)。
- 获取数据。
- 每隔 100 毫秒重复一次这个循环。
这根本不想工作!我试图与其他线程上的数据控制器通信,但它似乎无法访问属于主线程的serialPort(粗略地说)。
任何帮助表示赞赏
c# - 为什么将 DoEvents 置于循环中会导致 StackOverflow 异常?
我在遗留应用程序(不是我自己编写的)中遇到了一个奇怪的错误,当我更改日历上的日期时,我遇到了 StackOverflow 异常。
简化版本如下。这是包含两个控件的 Windows 窗体的代码隐藏,一个名为label2的标签和一个名为 MonthCalendar 的日历,名为monthCalendar1。
我认为这里的想法是创造打字机效果。我在 XP 上,我在 Windows 7 上的同事能够正常运行:
我看不到堆栈跟踪,我只看到:
{无法计算表达式,因为当前线程处于堆栈溢出状态。}
另外,我对询问为什么我没有检查 StackOverflow 异常的堆栈跟踪的评论很感兴趣,因为至少如果没有第三方工具,这似乎是不可能的。
这可能是什么原因造成的?谢谢
dart - dart 语言中是否有任何类似于 Visual Basic 中的 DoEvents() 的方法?
这是一个简单的问题。假设我有一个很长的循环要执行,让用户了解进度会很好吗?例如,我将打印到目前为止已执行的循环数以及剩余的循环数。我遇到的问题是这些输出在循环完成之前不会被可视化,因此没有必要显示它们。我确信 dart 中有一些方法可以作为浏览器的某种处理程序,以在我想要时执行任务和事件并继续运行循环。我是飞镖新手,希望有人能回答这个问题。谢谢你。
PS:如果你不知道怎么做,你可以给我任何关键字的想法,我可以用来在 dart 文档中寻找这个特殊功能,这将非常有帮助。