2013-03-05 76 views
2

我们在Delphi 7中使用一些OLE自动化来打开一个word文档,然后加载,保存并加载到数据库中。德尔福OLE自动化冻结图形用户界面

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

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

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

+0

会使用自己的线程是一个选项? – bummi 2013-03-05 09:51:03

回答

5

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

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

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

+0

+1为“肮脏的幕后花絮”:D – jachguate 2013-03-05 17:01:06

+0

感谢您的建议。现在我们已经获得了在线程内创建OLE对象的代码,该代码正在工作,并且进度条现在可以刷新。但是,我们现在遇到了一个新问题,如果Word OLE需要用户干预(即受密码保护的Word文档),则只要输入密码,该线程就会终止。 – nehpets 2013-03-06 09:58:51

+0

对这个问题的评论有点难以处理。听起来像是一个全新的问题。 – 2013-03-06 10:00:17