0

InteropとVB.NEt4.0を使用して、ループ内に多数のパワーポイントスライドを作成していますが、奇妙なパワーポイントのクラッシュを解決するのに問題があります。

スライドの作成はほとんどの場合うまく機能しますが、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
4

1 に答える 1

0

少し苦労した後、Backgroundworker.Reportsprogress サブを使用して datetime 変数を現在に設定しました。3 分ごとにタイマーがこの変数をチェックします。この変数が 5 分より古い場合、Powerpoint は強制終了され、再起動されます。完成したスライドごとにレポートの進行状況が増加するため、これは非常にうまく機能します。

于 2012-09-27T10:11:56.703 に答える