簡単なコンソール アプリケーションを使用して、infopath フォームを PDF ファイルに変換しています。これについて私がどのように行っているかを簡単に要約します。
概要: コンソール アプリケーションは、Windows フォームを作成します。フォームが (モーダルに) 読み込まれたら、infopath コントロール (Microsoft.Office.InfoPath.FormControl) をこのウィンドウに追加します。その時点で、infoPathControl.Open(myInfoPathFileStream) を呼び出します。これはすべて forloop で行われます。
問題: アプリケーションがランダムに例外 (壊滅的な障害、ヒープの破損など) をスローし、さらに良いことに、エラーをスローせずにハングすることがあります。ロギングとデバッグにより、infoPathControl.Open(myInfoPathFileStream) 呼び出しでハングしていると思われました。自動化されたプロセスの場合、これは明らかに受け入れられません。
試みた (しかし失敗した) 解決策
- 作成した各フォームを独自の (STA) スレッドにラップし、thread.join を使用してみました。COM の問題により、これは機能しませんでした。
- ループの各反復を独自のアプリケーション ドメインにラップしようとしました。これはある程度機能しましたが、appDomains の性質が依然として同期しているため、エラーなしでハングする問題は解決されません。さらに、奇妙なことに、COM オブジェクトによってスローされた例外を常にキャッチできるとは限らないようです。
- 最後に、タイマーが期限切れになった場合に例外をスローするように、フォーム スレッドにタイマーを配置しようとしました。これまでのところ、これが機能するかどうかを証明することはできませんでした。
私はすでにこれにかなりの時間を費やしてきたので、どんなアイデアでも大歓迎です。
ありがとう!