【问题标题】:Delphi : why messages block the program?Delphi:为什么消息会阻止程序?
【发布时间】:2013-07-15 10:05:41
【问题描述】:

如果我在显示消息时使用 delphi ShowMessage 或 MessageDlg,程序会等待单击按钮,我不希望程序阻止自己。 我需要在我写程序正在搜索的地方显示一条消息,但只要显示该消息,搜索就不会开始.. 我能做什么?

谢谢,杰克

ShowMessage('Sto ricercando . . .');
if (cartellaSorgente[Length(cartellaSorgente)] <> '\') then
begin
// do the research
end;

【问题讨论】:

  • 请发布您的代码,因为水晶球今天放假了...
  • 如果您使用非阻塞消息框并且想要搜索发生在主线程中。您应该查看TThread 类,以创建第二个线程来处理您的搜索,并最终在主线程终止之前将结果添加到主线程中的某个对象。
  • 如果您需要使用 ShowMessage 或 MessageDLG,您可以从这里获得灵感:stackoverflow.com/questions/15696885/…
  • 了解 OmniThreadingLibrary - 他们有很好的文章、wiki 书籍、博客和论坛

标签: delphi messagebox


【解决方案1】:

ShowMessage 显示一个模式对话框。这意味着对ShowMessage 的调用在对话框关闭之前不会返回。

您的问题是您希望在不阻塞 UI 的情况下执行长时间运行的任务。实现这一点的方法是将长时间运行的任务,即搜索,放入一个单独的线程中。从搜索线程向 UI 线程发送消息,以允许 UI 通知用户进度。

【讨论】:

    猜你喜欢
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 2011-04-03
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多