MessageBox() "eat" 我的用户自定义消息吗?

Will MessageBox() "eat" my user-defined message?

我有一个 UI 线程和另一个线程,我想使用 PostMessage() 从另一个 trhead 向 UI 线程发送一条用户定义的消息。

如果UI线程显示一个消息框,然后我发送自定义消息,消息框的消息循环是否会从UI线程中获取自定义消息消息队列,自定义消息会丢失?!

PostMessage()不是问题。 MessageBox() 运行它自己的消息循环来使消息框成为模态,但调用 DispatchMessage() 并且该函数确保为 [=] 的任何消息调用正确的 window 过程26=] 到任何 window.

只有在调用 PostThreadMessage() 时才会犯此错误。如果接收线程显示对话框或进入模态循环,那将永远不安全。 Raymond Chen 就此写了几篇博客文章:

Thread messages are eaten by modal loops

Why do messages posted by PostThreadMessage disappear?

一个可能的极端情况是发布一条消息,该消息需要消息循环而不是 window 过程来处理消息。比如快捷键。