2

(VSTO) Visio 2010 アドインに非常に奇妙な問題があります。アドインは、多くの visio vsd ファイルを順番に処理します。私が基本的に行うことは、特定のフォルダー内のすべての vsd ファイルをループすることです。このフォルダー内の各 vsd ファイルに対して、openEx(..) を実行し、このファイル内のすべての Shape-Object をループ処理します。すべての形状からデータを読み取り、特定の形状の機能を拡張します (形状シートのセルを形状に追加します)。次に、visioDiagram.save() と visioDiagram.close() を実行します。次に、次の vsd ファイルを開き、同じことを行います。Visual Studio 2010 でデバッグすると、アドインは約 400 個のファイルに対して実行され、ファイル 400 または 415 の間で毎回、実際の visio ダイアグラムを save() および close() し、次のダイアグラムを開こうとすると、次のメッセージが表示されます。

DisconnectedContext が検出されました

メッセージ: コンテキスト 0x3f4fc8' が切断されました。現在のコンテキスト (コンテキスト 0x3f5138) からインターフェイスを解放しています。これにより、破損またはデータ損失が発生する可能性があります。この問題を回避するには、内部に存在する COM コンポーネントを表す RuntimeCallableWrappers でアプリケーションが完全に完了するまで、すべてのコンテキスト/アパートメントが有効なままであることを確認してください。(コンテキスト 0x3f5138)。これにより、破損またはデータ損失が発生する可能性があります。この問題を回避するには、内部に存在する COM コンポーネントを表す RuntimeCallableWrappers でアプリケーションが完全に完了するまで、すべてのコンテキスト/アパートメントが有効なままであることを確認してください。

擬似コード:

Foreach (visioFile in visioFiles)
{
openedVisioFile = Visio.Documents.openEx(visioFile.vsd,..)
    Foreach(visioShape in openedVisioFile.Shapes)
{
   Read shape properties;
   Write properties in a dictionary;    
}
openedVisioFile.save();
openedVisioFile.close();
}
4

0 に答える 0