c# - 如何知道何时为表单显示消息框?

标签 c# forms

在我的应用程序中,我有一个在后台线程上运行的任务。当 UI 线程中显示 MessageBox 或任何模态对话框时,我需要在后台线程中发出通知。

虽然我可以通过在显示 MessageBox 之前调用一些函数来手动执行此操作,但如果我不必这样做,那就太好了。

例如:

backgroundThread.MessageShown(); // I do not want to call this explicitly every time!
MessageBox.Show("Task halted!");

我猜我可能有一些可以 Hook 的消息。即使在主 GUI 线程中,是否有任何消息/事件在显示模式对话框之前被触发?

好的,这是要求。我有一些任务是在 UI 线程上完成的,我必须在一个单独的对话框上显示进度,该对话框在工作线程上显示。我理解应该是必须在工作线程上完成的任务,但是目前的场景暂时不能改变。

一切正常,除了一个小故障 - 如果在 UI 线程中显示一个消息框,它会隐藏在进度对话框下方。所以用户永远不会知道 UI 正在等待输入。我需要一种方法来通知模式对话框已显示,我应该隐藏进度对话框。

现在,我必须在每次调用 MessageBox 之前显式隐藏它。

我希望能解释清楚。

最佳答案

设置 CBT Hook .然后您将收到所有已创建、激活、停用和销毁窗口的通知。然后使用 GetWindowClass 检查创建/激活的 hWnd 是否实际上是一个 MessageBox。

关于c# - 如何知道何时为表单显示消息框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/920164/

相关文章:

如果字段多次出现在 PDF 表单中,Java PDFBox 不会维护该字段的字体外观

php - jQuery根据表单ID序列化表单更新MySQL?

javascript - 如果选中则禁用表单(多表单)

C# Windows 服务不运行

c# - 重用排序逻辑

c# - WP7 ListBox ItemContainerStyle XAML 禁用不工作

c# - 如何压缩文件夹和文件?

java - 在 tomcat 5.x 上运行的 jsp 页面中 getParameter 文本字段返回 null

c# - 在 asp.net 控件中,此上下文不支持代码块

javascript - 按同一按钮触发 iframe 并提交表单