问题标签 [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.

0 投票
1 回答
3082 浏览

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 暖和起来。

0 投票
1 回答
1415 浏览

c# - 使用 DoEvents 在 Outlook 加载项中挂起进度对话框

背景:

我在 Outlook 加载项中使用一个简单的进度对话框来显示执行长时间操作的进度。由于我无法在单独的线程中运行使用 Outlook 对象的代码,因此我无法实现更传统的后台工作进程。我的加载项一直工作正常,直到 Outlook 2013 在某些情况下我的进度对话框挂起。当我在 VS 调试器中运行加载项并导致挂起,然后中断时,它似乎卡在尝试强制更新进度条的 DoEvents() 行上。

我的问题:

有人可以建议一个更好的系统来显示上述限制的进展(长时间运行的代码必须在主 Outlook 线程中运行)。有没有更好的方法可以在不使用 DoEvents() 的情况下使进度对话框响应?

下面的简单代码演示了我现在是如何做到这一点的。在对 Outlook 对象执行长操作的加载项代码中:

这是简单进度对话框窗口的代码:

0 投票
2 回答
284 浏览

c# - 等待 .NET 线程启动的正确方法是什么?

我在微软网站的线程教程中阅读了以下内容:

http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx

MSDN 建议使用以下方法等待线程变为活动状态:

这是推荐的等待方式吗?插入“DoEvents”调用以允许主线程保持响应会更好吗?如果出现问题并且线程永远不会“活着”,应该如何进行错误处理?如果这是不好的做法,什么时候最好使用 IsAlive?

一些版主已将此标记为重复,但他们引用的另一个问题没有提及有关 IsAlive、DoEvents 或线程无法启动时的正确错误处理的任何内容。我的问题与我在问题中链接到的 MSDN 文章及其建议使用 IsAlive 的繁忙循环特别相关。

0 投票
2 回答
28197 浏览

vba - DoEvents、等待和编辑

我有一组代码,其中包含:

这实际上是将宏从凌晨 3 点(当它完成运行代码时)到早上 7 点(应该恢复时)暂停了四个小时的窗口。代码本质上是一个无限循环。

我希望用户能够在那段时间内控制编辑某些单元格。我努力了

但是还没有找到保持宏运行的方法,但是在宏除了等待什么都不做的时候为用户提供控制。

任何见解将不胜感激。谢谢!

编辑:

还有一个后续问题。我创建了这个宏来引用实际的宏“Production_Board”。我希望这个宏一直运行并尽可能频繁地刷新。通过再次使用 goto startagain,由于“ontime”延迟间隔,它甚至在宏启动之前尝试再次启动宏。

我怎样才能让子 RunMacro 在宏“Production_Board”完成的第二秒重新启动?

0 投票
5 回答
2979 浏览

multithreading - 如果前一个滴答仍在运行,则执行旧版 VB6 计时器滴答堆栈或跳过

我们有一个(非常)用 VB6(15 岁?)编写的旧版应用程序。

该应用程序包含一个间隔为 300 毫秒的计时器。当计时器计时时调用的 Sub 执行一批与一些 SQL 服务器对话的代码,打印一些标签等等。

当一切正常时,这个 Sub 在 5ms 到 10ms 内执行 - 即在下一个计时器间隔发生之前 - 但它也在下一个滴答声之前浪费了 290ms。

我们需要让这个应用程序更快一点,一个选择是将间隔更改为 1ms - 在我们这样做之前,我想确认计时器是否会中止间隔(又名 - 完全忽略滴答声)如果前一个间隔仍在执行 - 或者它会开始构建对子的调用堆栈,导致一段时间后挂起?(我当然假设所有滴答声都在与 gui 相同的线程中执行 - 因此我们需要在每次滴答声后使用 DoEvents 以确保 UI 不会挂起。)

我已经尝试过对此进行调查,但要找到有关旧 VB6 计时器的可靠信息证明是很棘手的。

我们确实安排了这个计划,以便使用线程和后台工作线程在 .net 中重新编写——这只是我们正在研究的一个短期修复。

0 投票
1 回答
2373 浏览

c# - Application.DoEvents() 并在某些机器上冻结

我有一个调用 Application.DoEvents() 的 winforms 应用程序。现在应用程序在调用此方法时冻结(不足为奇)。

但是,这只发生在某些机器上。公平地说这是由于机器本身还是仍然取决于代码/application.doevents()?在这种情况下,应该将其重构为使用 backgroundworker。

这是机器/环境问题还是使用后台工作人员的机会?

0 投票
2 回答
865 浏览

java - 在 Java Swing GUI 中立即输出文本的正确方法

这样一段代码:

应在每次调用后立即将每条消息输出到LogBox( JTextArea) ,但仅在完成时输出。logURL ... acceptedURLConnectionReader.getText(url)

有几种方法可以立即输出:

  • Visual Basic 6 和 .NET 中的 Application.DoEvents
  • Delphi 中的 Application.ProcessMessages

有没有一些简单的方法可以立即输出?我正在研究有关 DoEvents 以及如何在 Java 中执行此操作的问题,但我认为从多线程开始学习 Java 不是正确的方法。

0 投票
3 回答
983 浏览

c# - SerialPort 控制器的多线程安全使用

我已经阅读了数十篇关于 c# 和 Application.DoEvents() 中的线程的文章......仍然无法正确使用它来完成我的任务:我有一个连接到我的 COM 的控制器,这个控制器在命令上工作(我发送命令,需要等待几毫秒才能得到响应),假设响应是我想使用循环绘制每个时间间隔的数据:

  • 开始我的循环。
  • 通过 serialPort 向控制器发送命令。
    • 等待响应(等待 20 毫秒)。
    • 获取数据。
  • 每隔 100 毫秒重复一次这个循环。

这根本不想工作!我试图与其他线程上的数据控制器通信,但它似乎无法访问属于主线程的serialPort(粗略地说)。

任何帮助表示赞赏

0 投票
3 回答
2331 浏览

c# - 为什么将 DoEvents 置于循环中会导致 StackOverflow 异常?

我在遗留应用程序(不是我自己编写的)中遇到了一个奇怪的错误,当我更改日历上的日期时,我遇到了 StackOverflow 异常。

简化版本如下。这是包含两个控件的 Windows 窗体的代码隐藏,一个名为label2的标签和一个名为 MonthCalendar 的日历,名为monthCalendar1

我认为这里的想法是创造打字机效果。我在 XP 上,我在 Windows 7 上的同事能够正常运行:

我看不到堆栈跟踪,我只看到:

{无法计算表达式,因为当前线程处于堆栈溢出状态。}

另外,我对询问为什么我没有检查 StackOverflow 异常的堆栈跟踪的评论很感兴趣,因为至少如果没有第三方工具,这似乎是不可能的。

这可能是什么原因造成的?谢谢

0 投票
2 回答
150 浏览

dart - dart 语言中是否有任何类似于 Visual Basic 中的 DoEvents() 的方法?

这是一个简单的问题。假设我有一个很长的循环要执行,让用户了解进度会很好吗?例如,我将打印到目前为止已执行的循环数以及剩余的循环数。我遇到的问题是这些输出在循环完成之前不会被可视化,因此没有必要显示它们。我确信 dart 中有一些方法可以作为浏览器的某种处理程序,以在我想要时执行任务和事件并继续运行循环。我是飞镖新手,希望有人能回答这个问题。谢谢你。

PS:如果你不知道怎么做,你可以给我任何关键字的想法,我可以用来在 dart 文档中寻找这个特殊功能,这将非常有帮助。