问题标签 [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 回答
462 浏览

vba - DoEvents 延迟因 Word VBA 中的计时器而异

我使用 DoEvents 在 VBA 执行中提供 1 秒的延迟,以正确显示计时器中的倒计时。使用的代码是:

我在另一个执行直到循环中使用了上面的代码。代码显示倒计时,但每次之间的延迟略有不同,尤其是嵌套执行直到循环中显示的部分!

其余的代码是:

模块代码:

为什么倒计时的延迟会有所不同?有人可以帮忙吗?

0 投票
1 回答
99 浏览

c# - 如何将布尔值从 Worker_ProgressChanged 传递回 Worker_DoWork

我正在使用后台工作人员读取值并将值传递给 Worker_ProgressChanged,以更新 UI。

在 Worker_DoWork 中:

在 Worker_ProgressChanged 中:

这在第一次使用时工作正常

但是,在第一次运行之后,此时我得到了一个 stackoverflow。在这里阅读了许多帖子后,DoEvents 并不是我想要实现的最佳方式。所以我想要的是一种将布尔值传递回 DoWork 的方法,或者是另一种让工作人员能够读取 agi.DvmReadyToRead 布尔值的方法。

谢谢!

0 投票
1 回答
489 浏览

excel - 链接更新时需要暂停 VBA 脚本

核心问题似乎在子程序中。为简单起见,我将其放在主程序中:我面临的问题在以下代码中:

Sub US_Sub01()

Dim NAtotal As Integer

NAtotal = Worksheets("Dashboard").Cells(20, "C").Value

MsgBox(“NAtotal”)'这告诉我有多少剩余的链接需要更新。从 4540 开始。

Do Until NAtotal = 0 '这个循环应该一直持续到 NAtotal 达到零为止。

NAtotal = Worksheets("Dashboard").Cells(20, "C").Value

DoEvents

Loop

NAtotal从 4540 不变,从不倒计时。如果我打破宏单元 C20 立即更新为零。

有什么建议么?

谢谢,史蒂夫

0 投票
1 回答
72 浏览

excel - VBA:使用 DoEvents 不同时间长度的代码暂停

我有一个基于用户表单上提供的用户输入生成报告的过程。我已经实现了错误处理,这是应该的,但是我的一个错误处理程序不能很好地处理DoEvents. 问题是我的 main sub LoopGenrtReport,它循环另一个 sub ,GenerateReport冻结了不同的时间长度,如果GenerateReportsub 由于错误而退出。我说的是不同的长度,因为有时它是 5 秒,而其他时候它永远不会移动到循环的下一次迭代。

我已经测试了删除进度条和 的代码Doevents,并且在这样做的过程中,我发现该过程完全按预期工作。

我也测试了没有Application.Interactive,但有进度条,Doevents看看这是否可能是问题,但同样的事情发生了。

下面是代码:

注意:此行为仅在我GenerateReport因错误退出时发生。实际错误是没有为当前InPut_Array(ii)项目找到交易。预期的行为是在主子中移动循环的下一次迭代而不会出现问题。如果退出被调用的子程序,则不会影响主子程序。

我花了很长时间试图解决这个问题,但无济于事。任何想法、建议或答案将不胜感激。

根据@Spring Filip 的请求,GenerateReport下面提供了被调用子的精简版本。

0 投票
1 回答
32 浏览

c# - Button-Color 仅在完成 ​​Paint-Method 后更新

使用 Button-Paint-Event 按钮不会在 for 循环的每次迭代中更新。但是每次迭代都会平滑地更新表单或面板。

因此,在执行此代码时,Button 以默认颜色开始,然后在 for 循环完成后,显示颜色数组中的最后一种颜色。它不会随着每次迭代而更新。

我的问题:有人知道,为什么每次迭代都没有更新 Button,但其他控件使用相同的代码?

0 投票
1 回答
683 浏览

excel - 如何在 vba excel 中执行 Do Event 计时器,同时仍然能够更改工作表中的值?

我有一个计时器,我正在积极运行一个DoEvents功能。问题是每三十秒我想在我的工作表中手动输入一些温度值。但是,如果我在活动运行时这样做,我会得到:

运行时错误“1004”:指定的维度对当前图表类型无效。

一些想法:我打算尝试关闭屏幕更新,但这会让我无法实时看到时间变化。

活动事件是否使我无法处理我的文档?如果是这样,有没有办法解决这个问题?

这是我的代码主体(我也有一个用于停止和重置计时器的子,但我认为这不相关):

0 投票
1 回答
134 浏览

excel - 闪烁的动画被 DoEvents 打断

我在 Excel VBA 中编写了一些简单的代码,以使范围“闪烁”一种颜色 - 这是通过在相关范围上仔细绘制一个矩形对象并改变其透明度以使框逐渐消失来实现的。

这是代码(Sheet1用于Worksheet_Change事件):

我使用一个With块来包含没有父变量的临时对象(我认为它非常整洁,并希望保持这种方式)。问题来自DoEvents调用(需要强制为动画重新绘制屏幕)。

动画是从某些工作表更改事件中调用的,如果调用了 sub 的第二个实例(或者实际上似乎发生了任何事件),第一个实例将被终止半完整,并且永远不会完成 - 这意味着永远不会删除临时形状.

这是一个插图,显示了我在说什么: 演示 Gif

我该如何解决这个问题?

0 投票
2 回答
504 浏览

excel - 在 Excel VBA 中,在嵌套循环中使用多个 DoEvent 是否有意义?

我有一个可以运行很长时间的程序。昨天花了14个小时才完成。这段代码循环遍历包含图像文件名的列的值,并搜索包含所有文件的数组,包括用户选择的位置的路径。在这种特殊情况下,文件名列包含近 2600 个文件名和用于搜索超过 12000 条记录的数组。(超过 3100 万次迭代,如果可以改进,欢迎提出任何建议 ;-))

在此过程中,我使用 DoEvents 来保持 Excel 响应。但我只是想知道拥有两个 DoEvent 是否有意义。每个循环一个(见下面的代码)。所有的处理都是在这段代码中完成的。在这种情况下运行超过 14 小时。

如您所见,我添加了两个 DoEvents。但是,如果只有一个就足够了,那么添加它的最佳位置是什么。在主循环或嵌套循环中。

更新:

重读文章DoEventsDoEvents (automateexcel)明确不要使用多个 DoEvents。在这种情况下,由于需要长时间运行,DoEvents 是必要的。但我现在不会在每次迭代时都调用它。正如建议的那样,我使用:

更新:

感谢 FreeFlow,我能够获得显着的性能改进。通过使用可用的过滤器功能而不是循环遍历包含超过 12000 条记录的数组。使用过滤器功能,将过程从几小时缩短到几秒钟。

更新:

最终结果是:

如前所述,由于Filter功能(Filter Function),我可以摆脱嵌套循环,该循环为工作表上的每一行迭代超过 12000 次。

0 投票
0 回答
59 浏览

vb.net - 光标不保持等待状态

通过数据表扫描时,我希望光标成为等待光标并显示扫描进度

由于 Application.DoEvents,光标退出等待,但是当我将其删除时,屏幕上没有显示任何内容。

如何让 WaitCursor 和 DatagridView 显示进度?

正如建议的那样,我使用了 BW。这是代码:

使用 BW 在 DGV 中绘制线条,但光标处于正常状态。

0 投票
1 回答
1140 浏览

vb.net - 创建一个等待延迟替代 Application.DoEvents

多年来,我使用以下方法在我的软件中造成延迟:


问题是,这会占用大量 CPU。我试过Thread.Sleep(1000)了,但这会在我的应用程序执行时冻结我的应用程序!
我尝试使用计时器,但我仍然需要一个不会冻结但行为类似于 Application.DoEvents() 的循环。这似乎是不可能的。

我的目标是这样做: