【问题标题】:Delphi OLE Automation freezing GUIDelphi OLE 自动化冻结 GUI
【发布时间】:2013-03-05 09:41:25
【问题描述】:

我们在 Delphi 7 中使用了一些 OLE 自动化来打开一个 word 文档,然后一旦加载,保存它,并将其加载到数据库中。

这工作正常,但部分要求是在 OLE 位发生时有一个进度条,如果 OLE 部分花费的时间太长,还有一个超时。

我们遇到的问题是在 OLE 发生时整个 GUI 冻结。进度条什么都不做,然后就在最后弹起来。

关于我们如何解决这个问题的任何想法?

【问题讨论】:

  • 可以选择使用自己的线程吗?

标签: delphi ms-word ole


【解决方案1】:

我认为这将很难干净地完成。据我所知,Word 自动化不会让您有机会取消长时间运行的事件。它也不会通知您进度。

您能做的最好的事情可能是首先将自动化移动到一个单独的线程中。然后在长时间运行的自动化过程中弹出一个选框进度条。至少这会让用户知道发生了什么事。

就取消而言,您可以让用户从您的进度对话框中取消,然后让您的程序继续。您可以终止自动化线程,但这会使 Word 处于不良状态。我只是让它继续完成,然后忽略结果。从用户的角度来看,这将很好地满足您的目标,即使它在幕后有点脏。

【讨论】:

  • 感谢您的建议。我们现在已经获得了在线程中创建 OLE 对象的代码,该线程正在工作并且进度条现在刷新。但是我们现在有一个新问题,如果 Word OLE 需要用户干预,即受密码保护的 Word 文档,一旦输入密码,线程就会终止。
  • 这个问题在 cmets 中有点难以处理。听起来像是一个全新的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 2020-08-06
  • 2015-04-08
  • 2015-05-09
相关资源
最近更新 更多