在执行操作时检测随机Powerpoint冻结

时间:2012-08-08 06:49:50

标签: vb.net crash powerpoint office-interop

我在循环中创建了很多Powerpoint幻灯片,使用Interop和VB.NEt 4.0,我无法解决奇怪的powerpoint崩溃问题。

幻灯片的创建在大多数情况下运行良好,但有时Powerpoint遇到了自己的问题并停止正常工作。 大多数时候它只是立即停止响应oder崩溃。检测此故障很简单,只需评估H_Result即可。但有时会出现更具挑战性的失败:Powerpoint停止响应但不会抛出异常。它只是停止工作,直到某人手动尝试按下Powerpoint中的按钮,这将产生异常。 但如果没有人按下此按钮,Powerpoint将无限期地保持冻结状态。由于这种情况,我的代码永远不会有机会评估问题。如果您想在晚上创建大量幻灯片并且在幻灯片50之后停止,这尤其令人讨厌。是否有人知道如何解决此问题。整个程序在背景工作者中运行 - 所以也许我的主线程可以每分钟左右询问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

1 个答案:

答案 0 :(得分:0)

经过一番努力,我只是使用Backgroundworker.Reportsprogress子来设置一个datetime变量。 每3分钟一个计时器检查这个变量,如果这个变量超过5分钟,Powerpoint将被杀死并重新启动。 因为每个完成的幻灯片都会导致报告进度增加,所以效果非常好。