问题标签 [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.
multithreading - VB6 DoEvents 没有按预期工作
我正在使用专有的 VB6 COM 库。该库有一些可以触发的函数,一旦通过事件完成,我就会得到结果。
容器类:
所以一切正常(已验证)。我要做的就是将上面的代码+更多封装在一个类中,这样我就可以将多个需要堆栈的函数包装起来,或者在回调成功后连续执行。
所以我继续这样做:
我得到“完成”对话框,但 DoIt2 永远不会触发。事实上,如果我在看到“已完成”消息后在运行调试时暂停我的代码,则代码当前正在执行 DoEvents,并且 myObj.Status = 1 就好像它从未被触及过一样。
似乎为一个单独的线程创建了一个不同的对象实例?在继续执行下一个 DoIt2() 之前,如何安全正确地等待事件回调触发?
wpf - 在 DoEvents 循环中,WPF 文本框对输入没有反应
出于某种原因,我的程序需要在函数中暂停,同时仍对用户输入做出反应。目前这是DoEvents
在循环中使用的。
不幸的是,我在循环textbox
中时无法正常工作。DoEvents
我无法输入。似乎可以让KeyDown
和KeyUp
事件正常,但Text
属性和显示不显示我正在输入的内容。
为了让事情变得更神秘,它会对退格和 Ctrl+V 做出反应来粘贴文本,仅仅输入它是行不通的。一旦我停止循环,它就会再次正常工作。
有任何想法吗?
附件是一个演示该问题的示例。以防万一我在 VS2010 上使用 VB。
这是 xaml 文件:
这是 xaml.vb 文件:
vb6 - 不使用 DoEvents,如何检测按钮是否被按下?
目前,我调用 DoEvents 以检查表单栏中的Button Foo是否已被单击。这种方法有效,但它需要太多的处理能力,从而延迟了程序。
我相信如果我只能检查Button Foo是否已被单击,而不是 DoEvents 必须经过的所有其他形式,则可以减少延迟。
关于如何检查Button Foo是否被点击的任何想法?
c# - 刷新控件
我正在尝试更改链接标签的前颜色,但颜色不会以图形方式更改。
我有一个计时器可以更新控件的前景色
更新成功,调试时发现myLbl的前景色属性不一样。那么为什么它不以图形方式改变它呢?
我也试过
并尝试在更改前景色后添加 Application.DoEvents() 。
有什么解决办法吗?
c# - 创建 MyControl.DoEvents() 方法
我们都知道调用该Application.DoEvents()
方法会导致当前线程暂停,同时处理所有等待窗口消息。如果消息导致事件被触发,则应用程序代码的其他区域可能会执行。这可能会导致应用程序出现难以调试的意外行为。还建议在新线程上执行需要很长时间的长而繁重的操作或计算,但似乎使用过滤器为 GUI 发布的消息创建方法(或扩展方法!)将很有用控件能够模拟 Application.DoEvents() 中的任意一个。(即有一个像这样的方法myControl.DoEvents()
:)
您对创建这样的方法有任何想法吗?
windows - 如何在不“邪恶”的情况下使用 DoEvents()?
一个简单的搜索DoEvents
会带来很多结果,这些结果基本上会导致:
DoEvents
是邪恶的。不要使用它。改用线程。
一般引用的原因有:
- 再入学问题
- 表现不佳
- 可用性问题(例如在禁用的窗口上拖放)
但是一些值得注意的 Win32 函数,例如TrackPopupMenu
并DoDragDrop
执行它们自己的消息处理以保持 UI 响应,就像这样DoEvents
做一样。
然而,这些似乎都没有遇到这些问题(性能、重入等)。
他们是怎么做到的呢?他们如何避免引用的问题DoEvents
?(还是他们?)
c# - DoEvents() 挂起
我如何删除这个问题?我最初认为该问题与 DoEvents 有关,但事实证明并非如此。我在这里重新发布了这个问题:http: //goo.gl/VpAEK对问题进行了更恰当的描述。
谢谢-我感谢有关如何处理此问题的任何指导...
首先,我知道这个问题,因为之前已经问过一个一般概念 - 我(希望)有一个具体的变化要问。我还将开始说,我理解不使用 Application.DoEvents() 的具体原因,并预先向每个人保证我们尽可能避免使用它,并且在整个过程中都有多个线程解决问题(没有 Application.DoEvents() 参与)我们的应用程序。
话虽如此,它是框架的一部分——我认为在某些特定情况下它占有一席之地。
我要问的具体情况是单线程情况,纯粹涉及 UI,其中(据我了解),根据定义 - 这不能在后台线程中完成。更具体地说,我们正在加载/配置表单中的许多 UI 元素,有时需要 1-2 秒才能完成,我希望在此过程中更新一个标签,指示正在发生的事情。在后台线程中确实没有任何繁重的工作/工作要做 - 这都是 UI。
如果在 4 个标签文本更改后我没有 Application.DoEvents() 调用,则标签不会自行重绘。如果有人可以提出一个替代方案,在纯 UI、单线程环境中以不同的方式解决这个问题——我全都听好了。
问题是,偶尔,如果我仍在尝试确定,Application.DoEvents() 根本不会返回。
我真的理解所有关于 DoEvents() 方法的抱怨(其中大部分是完全有效的!!!)以及它可能导致的各种问题!因此,理想情况下,无需就 DoEvents 调用的利弊进行激烈辩论(正如几乎所有其他关于该主题的线程似乎都在做的那样)——我要回答的具体问题是——任何人都可以想到任何理由为什么 DoEvents 会简单地挂起?(即不返回)?
如果你想辩论 DoEvents() 调用本身,这里有一个很好的描述它的优点和缺点:http: //goo.gl/4BtZf
- 我们的用户报告说,这似乎在他们使用该应用程序时不会发生,而是仅在他们离开计算机一段时间后才会发生(可能涉及屏幕保护程序?)我们在更改屏幕分辨率时注意到了它,而远程查看我们客户的计算机。
- 我们有用户坚持认为应用程序最小化时会发生更多。
- 我们有用户坚持认为,当应用程序被最小化时,这种情况发生得更多,他们在 IE 和/或 Outlook 中做了一些工作。
在内部,我们几乎完全无法重现它,除了今天早上我完成了上述所有操作,包括禁用我的网络连接一两分钟和 VPN 连接到服务器几分钟——所有这些都是在我们的应用程序被最小化的情况下进行的。
在此之后(实际上是我们第一次能够在内部重现它),应用程序挂起,当我附加到该进程时,它挂在 Application.DoEvents() 行上。2线法:
label.Text = "Foo"; 应用程序.DoEvents();
多个附加测试(尝试执行相同的操作)无法重现该问题。
有什么建议么?谢谢。
编辑:尝试得到一个专门关于 DoEvents 的问题的答案是禁忌吗?我对 StackOverflow 比较陌生,我只是有点困惑为什么我已经得到了两次反对票。
我已经在其他线程中多次看到这个问题,并且(至少在我看来,几乎普遍的反应是 - 不要使用 application.DoEvents())。我特别试图在我最初的问题中考虑周到,并解释为什么我们在这种情况下使用它。同时,我特别试图避免再次讨论为什么不应该使用 DoEvents。如果有足够多的人认为某事是个坏主意,那么在 stackoverflow 上讨论它只是禁忌吗?同样,我对这个论坛比较陌生,并试图了解这里的礼仪。谢谢。
c# - FormClosing 事件中的 Application.DoEvents
我已经实现了我的习惯ThreadManager
,在我的测试过程中它一直在完美地工作。当用户想要关闭应用程序时,关闭会暂停,直到所有线程退出或他们选择不等待就结束应用程序(经过 30 秒后)。
我需要澄清的是,如果使用Application.DoEvents()
可能会很危险FormClosing
。我应该使用它还是找到另一种等待线程退出的方法?
c# - 如何使用 BackgroundWorker 而不是 Application.DoEvent 来防止应用程序挂起
我是 c#/.net 的初学者,所以请告诉我如何使用 BackgroundWorker 而不是 Application.DoEvent。
这是我的代码:
c# - 使用 Application.DoEvents()
我面临一个Application.DoEvents()可以解决的问题。问题是 WebBrowser 假设异步导航到一个 url 但它没有,当我使用 Application.DoEvents() 它解决了这个问题,我认为这是因为应用程序处理一些其他事件并且不传递事件导航正确。
我阅读了一些有关此方法的信息,并且了解该方法将导致应用程序处理所有当前事件。现在我有点担心,因为我用大炮杀死了一只蚂蚁,有人能告诉我我所做的是否值得吗?