我有一个线程调用::PostMessage(hWnd, [...]);
向主线程发送消息,提醒它异步操作的结果。
但是,我担心如果线程需要很长时间才能完成其操作,则在调用hWnd
时可能不存在PostMessage
(用户可能已关闭窗口)。
如果结果无效,MSDN 文档不会说明任何结果。hWnd
您是否从经验或其他文档中知道如果hWnd
无效我可以期待什么?
Raymond Chen 对此写道:
一些选择摘录:
碰巧的是,程序的装载量(并且“装载量”是一个技术术语)包含在窗口被破坏后它们使用窗口句柄的错误。当重新使用窗口句柄时,该程序会向它认为仍然存在的窗口发送一条消息,但它会将消息发送到一个完全不相关的窗口。这对程序来说不是好兆头,对于错误接收到消息的新窗口通常也不是好兆头。
上次我们通过提出程序向已经被破坏的窗口发送消息的问题以及窗口句柄的重用如何加剧了这个问题而结束了我们的故事。尽管这显然是在销毁窗口后使用窗口句柄的程序中的一个错误,但这个问题非常普遍,以至于 Windows NT 中的窗口管理器人员决定采取更主动的方法。
正如其他人指出的那样,Ramond Chen 解释了如果HWND
新窗口重新使用会发生什么。 PostMessage()
会成功,它只会进入错误的窗口。但是,在HWND
没有被重新使用的情况下,PostMessage()
将失败并显示ERROR_INVALID_WINDOW_HANDLE
(1400) 错误代码。