gpt4 book ai didi

delphi - 处理应用程序进程消息

转载 作者:行者123 更新时间:2023-12-03 18:13:43 25 4
gpt4 key购买 nike

在我们的软件中,我们存在事件异步执行的问题。有时一个函数会“闯入”另一个函数并产生各种奇怪的结果。

我在这里处理用户输入和触发事件的计时器。

问题在于,不是一个一个地执行与事件相关的代码,而是在 Delphi 为它提供一个窗口的第一个可能时刻完成:application.processmessages。这会带来问题,有时功能 A 的一半完成,然后功能 B“闯入”,完成,然后,功能 A 的后半部分完成。这会产生“令人惊讶”的结果。

有什么好的方法可以解决这个问题吗?

我尝试过的事情:

--

  • 使用“忙标志”,这有一些起伏,主要是你所做的一切都必须知道它。
  • 尽我所能删除所有 application.processmessages。这有很好的效果。但是我们依赖于一些第 3 方组件,我发现它们也会触发 application.processmessages。

接下来我正在考虑尝试构建某种“命令队列”,我可以在其中接收我的事件并以先进先出的方式触发它们。

除了从头开始重建我们拥有的一切外,还有其他/更好的方法来解决这些问题吗?

最佳答案

最好的方法是消除对 Application.ProcessMessages 的调用。大多数时候,还有其他方法可以完成 Application.ProcessMessages 应该做的事情。您需要仔细研究为什么需要该调用,然后找到更好的解决方案。例如,您不需要 Application.ProcessMessages 来更新 UI。还有其他方法可以做到这一点。

如果第 3 方组件正在调用 Application.ProcessMessages,请联系该供应商,他们应该用更合适的函数替换此调用。如果这不是一个选项,您可以尝试使用变通方法,例如在线程中使用该组件(如果可能)。或者创建一个不可见的模态窗口并在 ShowModal 函数内部执行组件的方法。这至少会避免用户输入消息。 (“不可见模态窗口”是一个具有 BorderStyle=bsNone、大小=1×1 和 100% 透明度的 Form)。

关于delphi - 处理应用程序进程消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30613658/

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