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

c# - 页面不包含 BeginInvoke 的定义

我是编码新手,对于我的第一个项目,我必须从数显卡尺读取信息并将其显示在 Web 应用程序的文本框中。我从另一个项目中找到了一些其他项目的代码,这些代码是在他们使用 Windows 窗体的地方创建的。我正在使用 Visual Studio 2013,并且正在修改他们的代码以使用 Web 应用程序而不是 Windows 窗体。我遇到的麻烦是他们有两行我不理解的代码,并且似乎找不到如何修改它们以满足我的需要的答案。代码是

问题是 BeginInvoke 和 DoEvents() 都有一个错误,说两者都没有定义。有没有办法将其修改为 Web 应用程序?或者有没有办法让这两个定义都知道?

对许多人来说,这似乎微不足道,但我无法弄清楚。任何帮助将不胜感激!

我使用 System 包含以下 using 语句;使用 System.Collections.Generic;使用 System.Linq;使用 System.Web;使用 System.Web.UI;使用 System.Web.UI.WebControls;使用 System.ComponentModel;使用 System.Data;使用 System.Drawing;使用 System.Text;使用 System.Threading;使用 System.IO.Ports;使用 Telerik.Web.UI;使用 System.Windows.Forms;使用 System.Web.Services.Protocols;使用 System.Web.Services

;

0 投票
3 回答
1029 浏览

c# - 无论如何,线程使 Windows 窗体无响应,但人们抵制 DoEvents()。如何同意那些事情?

不要使用 DoEvents()。使用线程!

这个口头禅正在互联网上漫游,包括 SO。好的,所以我创建了一个简短的概念证明,我尝试只使用线程。所以基本上按钮应该做的是触发向下移动蓝色框。

它在单独的线程中运行 YET windows 窗体没有响应(我无法移动它或再次单击按钮),直到它完成向下移动。

问题是,我搞砸了什么?如果我不应该使用 DoEvents(),那该怎么办?(如果您取消注释该Application.DoEvents()行,它将变得响应)。

代码

应用布局

在此处输入图像描述

0 投票
1 回答
126 浏览

c# - DoEvents() 在 FormClosing 中是否也是邪恶的?

关于我建议使用的另一个问题

在 FormClosing 事件中(在完成冗长的计算后, processingLock 立即变为假)。它的目的应该是让应用程序有条不紊地关闭,并且原始发布者没有使用线程。

在我建议的答案中,有人评论说 DoEvents 从来都不好,提供此链接:Use of Application.DoEvents()

我阅读并(我认为)理解了这个问题。在我看来(这仍然是愚蠢的)如果我在 FormClosing 事件中使用上述 DoEvents 则不会发生混淆事件的风险 - 如果无法取消用户的关闭(例如设置 e.Cancel = true) .

我的问题:这是确保应用程序正常终止的有效方法吗?如果不是,为什么?

0 投票
1 回答
955 浏览

vb6 - VB6查看消息队列

我在一个非常古老的 VB6 应用程序上工作,它仍然是我们公司的主要项目。在开始这个项目之前,我从未使用过 Visual Basic,更不用说 VB6。我遇到过很多地方都有事件来保持表单响应,并且我越深入研究什么doevents,在尝试用它们来调试代码时,我就越需要挠头。

我正在研究一种方法,可以判断当我们点击那行代码时 doevent 是否真的会做任何事情。我希望如果有人对窗口泵和消息队列有更多了解,可以告诉我我的方法是否能有效地告诉我这种方法是否有效。我正在尝试使用PeekMessage来查看它们是否是队列中的任何消息,然后再点击 doevents 行。

所以我希望当我打电话时,MyDoEvents我只会点击Debug.Assert bPeekMessage = True队列中没有消息的情况。这将允许我在处理旧的未注释代码时判断 doevents 是否确实做了某事。

我对此进行了测试,看起来我只在Debug.Assert没有事件时才点击,但我仍然不知道我的发现是否准确/可靠。有没有其他人有过尝试查看 doevent 将要做什么的经验?

0 投票
2 回答
2393 浏览

c# - WPF“DoEvents”:如何实现它?

我为“DoEvents”方法找到了这两个实现:

解决方案 1:

解决方案 2:

你能解释一下这两种实现有什么区别,什么是最适合使用的?

谢谢。

0 投票
2 回答
823 浏览

c# - Timer - DoEvents 的替代实现

我是 C# 新手,我需要为一个用于监视硬件的小型应用程序使用计时器。我找到了一些计时器的参考代码,但它使用了 DoEvents()。因为,我运行计时器很长时间,有时是几天和几小时,我开始出现堆栈溢出。我现在明白是 DoEvents() 导致了这种情况,这是大多数人推荐使用的。您建议我使用什么功能代替 DoEvents 来设置我的计时器?

我的代码:

0 投票
3 回答
3621 浏览

c# - 避免在 C# 中使用 Application.DoEvents()

很多优秀的程序员(包括很多优秀的 Stackoverflow 成员)都反对在Application.DoEvents()任何情况下使用。实际上,它甚至得到了网络上大量文章的支持,例如这篇文章,关于 SO 的著名辩论,...

虽然,我被困在一个案例中,(我)认为DoEvents()是唯一的出口(缺乏经验)。介绍就够了,让我们看一些编码。

我有一个“serialPort”组件通过串行通信与控制器连接,发送命令并等待其响应,仅此而已。

在我的 serialPort 的 DataReceived 方法中,我读取了现有的响应并打破了循环

不完全是这样,但这是一个示例代码,显示了我如何通过串行通信接收信息,你能告诉我我在哪里强迫自己陷入这个陷阱吗?

0 投票
3 回答
1356 浏览

vba - 允许 Excel 在 application.Speech.Speak 处于活动状态时执行操作

我有一个用作倒数计时器的代码(一张纸上最多三个计时器),并且在计时器处于活动状态时会发生一些动作。现在一切正常。当任何计时器达到 0 时,将运行以下代码片段:

从上面的代码片段调用的AlertTIMERsub 运行Application.Wait,在它最后一次调用和下一次调用之间创建一个 3 秒的暂停。我包含等待功能的原因是因为在Application.Speech运行时我无法完成任何其他操作(例如单击终止警报子的“停止”命令按钮)。

有没有办法允许在 Application.Speech 处于活动状态时按下命令按钮,以便我可以删除 Application.Wait 功能?还是我需要保留 Application.Wait 的解决方法?

我曾尝试DoEvents将它放在第一次哔哔声之前使用,但它不起作用。

0 投票
2 回答
1520 浏览

c# - Application.DoEvents 永不退出

我正在开发一个遗留应用程序,它到处都有 Application.DoEvents。我完全意识到,由于重入问题,这是不赞成的,但重构目前不是一种选择。

DoEvents 永远不会退出的问题已经开始出现。UI 是响应式的(我可以在用户日志中看到 UI 线程活动),因此 DoEvents 似乎正在发送消息,但由于某种原因它永远不会完成。不幸的是,这个 DoEvents 在主要的数据处理组件中,这意味着它会停止处理服务器响应,因为它卡在 DoEvents 行上。

我们有 Stopwatch 跟踪,它告诉 DoEvents 运行了多长时间 - 令人惊讶的是,我得到了一个日志,它说它运行了 188267770 毫秒,即 52 小时(gulp)。它似乎在星期六凌晨 3 点左右进入这种状态,直到用户在星期一进来并关闭应用程序(没有杀死进程,我可以看到 GUI 线程跟踪优雅地关闭事物),此时 DoEvents 完成并记录计时器数据(因此关闭期间发生的某些事情必须说服 DoEvents 完成)。

当然,这只发生在生产用户的机器上,而不是我的开发盒:)

有没有人见过类似的问题?

我已经反编译了 DoEvents 以及 Conrol.BeginInvoke 如何使用 Windows 消息队列将方法委托推送到 GUI 线程,但我看不到 DoEvents 如何像这样卡住,并保持 UI 响应。

源代码控制差异也不是一个选项,因为自用户拥有的最后一个“好”版本以来已经有大约 30 个版本,而这个新版本存在问题 - 所以大约 200 个文件已更改。

非常感谢保罗

0 投票
0 回答
1357 浏览

webbrowser-control - 在控制台应用程序中替代 Application.DoEvents 以使 Forms.WebBrowser 加载 javascripts

我在控制台应用程序中使用 System.Windows.Forms.WebBrowser 来呈现网页,然后在其上调用脚本。为了呈现网页,我使用 Application.DoEvents 来加载和执行脚本。

但是有时应用程序会在调用 Application.DoEvents 时挂起。我找不到任何理由。我不认为我在事件循环上造成死锁。

网络上的许多人说根本不应该使用 Application.DoEvents,因为它产生的问题多于解决的问题。所以我认为必须有一个替代方案。但是我搜索了很多,没有找到 Application.DoEvents 的替代方案。

有人知道吗?任何信息表示赞赏。先感谢您!


感谢 Noseratio 的帮助,我完成了代码的起草,但仍然存在冻结问题。

以下面的代码为例(代码太长,所以我把它粘贴在 pastebin 上): http: //pastebin.com/DkDcrirU

当您运行此代码时,偶尔会出现至少一个窗口无法关闭。如果你附加到冻结的进程,你会发现代码卡在下面一行(由“>>>”表示):

有谁知道发生了什么?