116得票6回答
什么是消息泵(Message Pump)?

在这个帖子(大约一年前发布),讨论了在非交互式会话中运行Word可能出现的问题。那里给出了(非常强烈的)建议不要这样做。其中一个帖子中指出:“Office API都假定您在桌面上以交互式会话运行Office,并拥有显示器、键盘和鼠标,最重要的是,一个消息泵。”我不确定那是什么。(我只学习C#编...

28得票3回答
.NET Windows服务中的消息泵

我有一个用C#编写的Windows服务,处理我们自助应用程序的所有外部硬件I/O。我们的新设备之一是带有本机DLL API的USB设备。我已经创建了适当的P/Invoke封装类。然而,此API必须使用指向Windows应用程序的HWnd进行初始化,因为它使用消息泵来引发异步事件。 除了向硬件...

27得票8回答
长时间操作期间如何抽取Windows消息?

我在运行一个大操作时收到以下消息: CLR无法在60秒内从COM上下文0x1fe458切换到COM上下文0x1fe5c8。拥有目标上下文/公寓的线程很可能正在进行非泵等待或处理非常长时间的操作而没有泵出Windows消息。这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应...

20得票7回答
Windows中无声捕获的异常,如何手动处理?

我们遇到了在消息泵内抛出异常时,Windows会默默地吞噬这些异常并允许应用程序继续运行的问题。例如,我们创建了一个测试MFC MDI应用程序,并重载了OnDraw函数:void CTestView::OnDraw(CDC* /*pDC*/) { *(int*)0 = 0; // Cr...

19得票3回答
哪些阻塞操作会导致STA线程泵送COM消息?

当在单线程单元 (STA) 中实例化 COM 对象时,线程通常必须实现消息泵以便于调用来回其他线程(见这里)。 可以手动泵送消息,也可以依赖于某些阻塞操作自动泵送与等待相关的 COM 消息,但不是所有阻塞操作都会自动泵送(参见此相关问题),文档通常无法帮助决定哪种情况。 如何确定阻止线程操...

11得票3回答
如何使程序不在Alt-Tab或任务栏中显示

我有一个程序需要在后台运行,当用户连接到RDP会话时,它将进行一些环境设置,然后启动一个程序。当程序关闭时,它将进行一些清理工作并注销会话。 我目前的做法是让终端服务器启动这个应用程序。这是一个Windows窗体应用程序,以防止控制台窗口显示:public static void Main(...

10得票1回答
在Windows消息队列中清除消息

我对Windows消息泵不是很了解,但我猜测事件是通过消息泵触发的。 当我的Web浏览器控件导航到某些网站时,它会触发各种文档完成事件。一旦我在WebBrowser_Document_Completed()中获取所需内容,我想忽略所有后续的文档完成事件。 我该如何做到呢? 如果我在Do...

9得票4回答
运行多个UI线程

问题请跳到底部;这只是一些额外信息 我正在使用一个组件(GeckoFX)来渲染一些网站,虽然很好,但它只能在Windows Form中使用;因为它必须绑定到可以被绘制的WinForms对象。由于所有的WinForms都在同一个线程中运行,我一次只能使用一个GeckoFX实例;所以我决定创建一...

9得票2回答
控制台应用程序中的消息泵

我有一个相对简单的.NET控制台应用程序。有时该应用程序在没有操作员的情况下批处理运行,而有时则是“随意运行”。如果它正在批处理模式下运行,则有一个定义好的默认选项,允许程序自动运行。如果有操作员存在,则有其他选项,允许用户从功能列表中选择。 出于某些原因,不希望使用命令行参数。相反,我创建...

7得票3回答
ShowDialog方法没有显示窗口而 hang 了,是死锁吗?

我们有一个WPF繁忙窗口指示器。它使用window.ShowDialog()在主线程上显示。响应Loaded事件后,执行一个操作并关闭窗口,以便应用程序继续工作。 偶尔会出现window.ShowDialog()挂起而未显示对话框,Loaded事件未触发,导致应用程序挂起。相关代码如下: ...