multithreading - EndDialog 不能在线程中调用?

标签 multithreading winapi

我想在线程结束时关闭模态对话框。我知道如何使用PostMessageSendMessage,但为什么不能直接调用EndDialog成员函数?如果我这样做,它会导致 App 异常。

最佳答案

EndDialog 需要从创建模态对话框的线程中调用,特别是对话框过程。听起来你想从另一个线程调用它。要从另一个线程关闭对话框,您需要发布一条消息,因为跨线程支持该消息。然后对话框可以响应消息并自行关闭。调用线程需要等待对话框关闭才能销毁线程。

如果您想知道为什么会这样,那么大多数 USER API 函数都具有线程关联性。它们最初是以这种方式实现的,并非旨在支持跨线程使用。

关于multithreading - EndDialog 不能在线程中调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14586240/

相关文章:

类成员变量的 C++ 线程访问问题

java - 如何配置ThreadPoolExecutor来限制线程数

java - Android:当 Activity 结束时,Timer 被孤立

visual-c++ - 从 exe 加载 exe

c++ - 如何获取光标位置

delphi - 如何通过 Windows API GetExtendedTCpTable 检测新的 TCP 连接

java - 如何获取任何已完成的可调用的结果?

multithreading - 在wxPython应用程序中实现我自己的事件循环

c# - 通过 Win32 API 你将如何获得一类 SysListView32 的值

c++ - 使用 C++ winAPI 设置 Windows 的高性能电源计划