问题标签 [message-loop]
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.
.net - 用于模态对话框的 WPF 表单和 Windows 消息传递
我有一个带有文本框和按钮的简单 WPF 表单,在失去焦点时它只是简单地显示一个消息框。我的代码看起来像这样
如果我的文本框有焦点并且当我单击按钮时,如果显示消息框,则不会触发按钮单击,但是如果我在显示消息框之前调用 Application.DoEvents(),则我的按钮单击会被触发。
我的实际应用程序要复杂一些,但我试图用一个简单的文本框和一个按钮来模拟这种行为。在实际应用程序中,我的后台工作线程之一在调度程序上发布以显示模式消息框(甚至 WPF 表单),并且队列中的任何 UI 挂起消息似乎都由消息框(我怀疑)处理,例如,如果我单击画布控件理想情况下,我会得到“ Mouse Down ”和“ Mouse Up ”,但是如果在这 2 条消息之间出现模态消息框,那么我只会得到“ Mouse Down ”和“ Mouse Up ”消息丢失。
注意:在非模态对话框的情况下,我看不到这种行为。
另外,如果有人可以指出我的知识,关于 Windows 窗体如何在模态对话框和非模态对话框的情况下处理 Windows 消息泵的好文章会很有帮助。
c++ - 对话框窗口中的 MFC 消息循环
我创建了一个 MFC 对话框应用程序。
现在我想使用一个消息循环,但我找不到它。我读到 mfc 会为我创建它,但它会被隐藏。那么我该如何操作消息循环呢?
我需要消息循环从我为该应用程序创建的托盘图标中接收事件。
这样我就可以使用类似的东西:
我仍然是 mfc 的初学者。
c# - Application.DoEvents() 并在某些机器上冻结
我有一个调用 Application.DoEvents() 的 winforms 应用程序。现在应用程序在调用此方法时冻结(不足为奇)。
但是,这只发生在某些机器上。公平地说这是由于机器本身还是仍然取决于代码/application.doevents()?在这种情况下,应该将其重构为使用 backgroundworker。
这是机器/环境问题还是使用后台工作人员的机会?
winforms - 如何在一个 WinForms 窗口中运行多个类似插件的 XNA 游戏
我想创建一个由多个面板组成的(WinForms)应用程序。对于每个面板,我希望能够分配一个 .dll 文件:
这些 .dll 文件应包含应呈现到相应面板中的 XNA 游戏。
我可以加载这些游戏
现在,我不能使用game.Run()
,因为它会启动第二个消息循环。
启动一个新线程也会失败,因为InvalidOperationException
s 涉及从另一个线程访问控件。
我在网上找到的教程只能处理我自己编写的游戏并将其包含在主应用程序中,但我希望能够添加其他游戏,类似于插件。
如何让我的 WinForms 应用程序渲染那些 XNA 游戏,或者有更好的解决方案吗?
data-structures - CPU获取/执行周期是:“事件循环”
我正在阅读有关传递消息的事件循环,因为我必须为我正在从事的项目设计一个。为了更好地理解它,我试图将它类比为我更了解的其他事物,以帮助我理解。CPU 的获取/执行周期是否与事件循环软件结构相当?如果不是,主要区别是什么(当然,除了直接存储在硬件中)。谢谢你。
winforms - 谁发送/发布了 WM_MOUSEMOVE?
当使用 Win32 API 消息循环(或任何更高级别的抽象,例如System.Windows.Forms.IMessageFilter
)来获取消息时,我如何找出是谁/哪个控件/哪个组件/哪段代码发布了WM_MOUSEMOVE
?
这在 Win32 的上下文中是否有意义?类似于object sender
.NET 事件的东西。
我检查了文档,WM_MOUSEMOVE
但找不到任何东西。从那以后我已经有十年没有广泛使用 Win32 API 了。
c# - 区分用户生成和我自己的应用程序生成的鼠标移动
Cursor.Position
我的 WinForms 应用程序只需通过在某种带有计时器的循环中设置属性即可将鼠标光标移动到表单周围。
我希望这种移动一直持续到用户自己不使用鼠标移动它为止。一旦他或她这样做,我希望我的代码停止。
因此,我需要一种方法来区分用户生成的鼠标移动发送的鼠标移动与我的应用程序生成的鼠标移动。
c# - 消息循环阻塞应用程序
我需要在 Web 浏览器控件中关闭下载弹出窗口(禁止用户下载文件)。我怎样才能做到这一点?
我发现了这个: 如何阻止 .NET WebBrowser 控件中的下载?
我用了第二个答案。它正在工作,但我有问题。似乎调用已创建对象的 GetText 会阻塞整个线程。我没有任何解决方案。
//编辑
好的,感谢@sgorozco 的建议。现在我正在使用 SetWindowsHookEx 和 WH_CBT。然后在消息循环中,我正在捕获 HCBT_CREATEWND 事件。但是我从 lparm 获取 CBT_CREATEWND 有问题。我收到“托管调试助手‘FatalExecutionEngineError’”异常。
这是我当前的代码:
//编辑 2
这是我的定义:
我的 myCallbackDelegate 是一个静态字段,所以它肯定不是 GC 收集的。临时我每 500 毫秒枚举所有窗口并查找包含文本“文件下载”的对话框。但这是一个丑陋的解决方案。
.net - 类库中的 WebBrowser 控件
因此,正如标题所示,我正在尝试在类库中使用 WebBrowser 控件。我已经经历了几个 SO 问题,比如这篇优秀的帖子,但在我的情况下,独特之处在于 WebBrowser 对象必须在应用程序的生命周期内保持活动状态,并在库客户端不时进行的不同调用中保持其状态/cookies到时间。
我已经确认 WebBrowser 控件不会进行导航,除非它创建的线程包含消息泵。但是,一旦我引入消息泵,Application.Run()
调用代码块并且不会生成更多事件。任何帮助都会真正得到应用。
c++ - 间歇性调用低级键盘钩子,GetMessage 永远不会返回
我在一个工作线程中设置了一个低级键盘钩子,它也运行一个消息循环。我大约 1/3 的击键触发了钩子函数,并且没有一个在我的消息循环中释放 GetMessage 函数。由于与后者有关,消息也没有排队(我刚开始使用 Windows 的消息循环)。什么会导致只有一些击键触发钩子?是否有一些设置/函数调用我缺少让 GetMessage 正常工作(据此我没有遗漏任何东西)?
这是我的钩子设置和消息循环:
还有我的钩子函数: