2012-08-08 25 views
0

我在一個循環中使用Interop和VB.NEt 4.0創建了很多Powerpoint幻燈片,並且我無法解決奇怪的Powerpoint崩潰。檢測隨機Powerpoint在執行動作時死機

在大多數情況下,幻燈片的創建效果很好,但有時Powerpoint會遇到它自己的問題並停止正常工作。大多數時候它只是立即停止響應或崩潰。檢測此故障很簡單,只需評估H_Result。但有時候會有更具挑戰性的失敗:Powerpoint停止響應,但不會拋出異常。它只是停止工作,直到有人手動嘗試按下Powerpoint中的按鈕,這會生成一個異常。 但是如果沒有人按下這個按鈕,Powerpoint將無限期地凍結。由於這種情況,我的代碼將永遠沒有機會評估問題。如果您想在晚上創建大量的幻燈片並在幻燈片50後停止,這尤其令人討厭。有沒有人有一個想法如何解決這個問題。整個程序運行在Backgroundworker中 - 也許我的主線程可能每分鐘都會問bgw「你還活着嗎?」但是如何實現這一點。

下面是Backgroundworkercode的簡單概述。

基本上,它是這個樣子:

Dim SlideNumber as Integer =0 
Dim PowerpointHasCrashed as Boolean 
Dim Slide as pptns.Slide 

do while SlideNumber<ListOfSlidesTobeCreated.Count-1 and PowerpointHasCrashed =False 

try 
    DoStuffWithSlide(ListOfSlidesTobeCreated(SlideNumber)) 
catch ex as exception 
    If ex.message like PowerPointFailue then 
     PowerpointHasCrashed =True 
    End If  
end try 

SlideNumber +=1 
end while 

If PowerpointHasCrashed =true then 
SlideNumber -=1 
'Do some Stuff to repair the Damage and start the loop again. 
End If 
+0

一個簡單的方法可能是將SlideNumber值公開爲可以從主線程查詢的公共屬性。所以如果它幾分鐘沒有增加,那麼有些事情是錯誤的。但實際上從我的經驗來看,奇怪的PowerPoint行爲通常是由第三方軟件造成的,而不是PowerPoint本身造成的。所以我建議你檢查你的代碼並禁用任何加載項。 – 2012-08-09 07:38:01

回答

0

經過一番掙扎後,我只是用了Backgroundworker.Reportsprogress子設置日期時間變量到現在。 每3分鐘一個計時器檢查這個變量,如果這個變量大於5分鐘,Powerpoint將被終止並重新啓動。 因爲每張完成的幻燈片都會導致報告進度增加,所以這種方式非常有效。