2013-03-05 79 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