【问题标题】:Show a message dialog form outside the main UI thread在主 UI 线程之外显示消息对话框表单
【发布时间】:2017-07-21 11:37:38
【问题描述】:

我想创建一个对话实用程序统一体,它可以从不同线程以异步方式调用,并在活动表单上显示我的对话消息,我确信 TDialogServiceAsync 是实现它的完美方式,但我不能从主 UI 线程外部调用 MessageDialog 方法。

是否有可能实现我想要的,而不必在我的主窗体中实际创建一个显示对话框的方法?

我现在正在为 Windows 开发,但如果有一种可以在多个平台上工作的方法,我将不胜感激。

提前致谢。

【问题讨论】:

  • 在 Windows 上,可以在工作线程中调用 Win32 MessageBox() 函数。但是任何基于 VCL/FMX 对话框的东西都不是线程安全的,不应该在主 UI 线程之外调用。

标签: firemonkey delphi-10.1-berlin


【解决方案1】:

不,所有接触 ui 的事情都必须在主 ui 线程中完成(相当逻辑)。唯一可以在后台线程中做的事情

TThread.queue(nil,
  procedure
  begin
    showdialog...
  end);

【讨论】:

  • 不是我想要的,但是 TThread.queue 是一个非常有用的方法,它帮助我意识到我的想法的问题
猜你喜欢
  • 2016-06-08
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多