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

nul*_*Dev 2 c# forms

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

虽然我可以通过在显示MessageBox之前调用某个函数来手动完成它,但是如果我不需要它会很棒.

例如:

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

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

好的,这是要求.我有一些在UI线程上完成的任务,我必须在一个单独的对话框上显示进度,该对话框已在工作线程上显示.我知道它应该是必须在工作线程上完成的任务,但目前的情况暂时无法改变.

除了一个小故障外,每件事情都运行良好 - 如果UI线程中显示了一个消息框,它将隐藏在进度对话框下方.因此,用户永远不会知道UI正在等待输入.我需要一种方法来通知已显示模式对话框,我应该隐藏进度对话框.

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

我希望这可以解释.

Dan*_*röm 5

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