gpt4 book ai didi

multithreading - Delphi - ShowMessage 或 MessageDlg 时应用程序挂起

转载 作者:行者123 更新时间:2023-12-03 19:30:23 26 4
gpt4 key购买 nike

为什么应用程序在执行线程时挂起并且该线程有 ShowMessage 或 MessageDlg
但是当使用 MessageBox 时一切正常。

如果应用程序外观不是默认的,所有这一切都会发生>>“ Windows

如果选择的外观“ Windows ”即使使用 ShowMessage 和 MessageDlg,它也永远不会挂起

最佳答案

ShowMessage()MessageDlg()不是线程安全的。它们显示 VCL 表单,只能在主 UI 线程的上下文中使用。
Windows.MessageBox()通常是线程安全的,如果您在从工作线程调用它时指定一个 nil 所有者窗口。它创建并显示自己的对话窗口,并在调用线程的上下文中运行自己的模式消息循环,因此通常不存在线程问题。但也有一些陷阱(参见这篇文章:MessageBoxes and worker threads)。
TApplication.MessageBox()来电Windows.MessageBox()在内部,但不是线程安全的,因为它调用 RTL 和 MainForm 的事情不是线程安全的,因此也只能在主 UI 线程的上下文中使用。

简而言之,不要在工作线程中使用 VCL 弹出消息 - 期间。使用Windows.MessageBox() ,或者为了安全起见,将弹出消息委托(delegate)给主 UI 线程。

关于multithreading - Delphi - ShowMessage 或 MessageDlg 时应用程序挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26718030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com