私のアプリケーションでは、「アクティブ レポート」機能に Word 相互運用機能を使用しています。Word ドキュメントがアプリケーションから起動されると、EventWaitHandle を設定して、ドキュメントが閉じられるまでアプリケーションを一時停止します (「モーダル」効果を作成します)。
wh.WaitOne();
Application Quit イベントという単語にイベントを設定しました。次に、アプリケーションが続行するための待機 EventWaitHandle を設定します。
wordGenerator.WordApplication.ApplicationEvents2_Event_Quit += WordApplication_ApplQuit;
private void WordApplication_ApplQuit()
{
wh.Set(); // signal that word has closed
wordGenerator.Dispose();
wordGenerator = null;
}
これが呼び出された後、アプリケーションは保存された場所からドキュメントを読み取り、データベースに保存します。すべてうまくいきます。UNLESS ... ユーザーがドキュメントに変更を加え、CTRL + S を使用せずに閉じるをクリックすると、「変更を保存しますか」というプロンプトが表示されます。
この例では、Word で [閉じる] をクリックするとすぐに終了イベントが発生しますが、変更を保存するためのダイアログが表示されている間、Word は開いたままになります。その後、アプリケーションは引き続き実行され、ドキュメントを読み取ってデータベースに保存しようとすると、「ドキュメントは別のプロセスで使用されています」という IO 例外が発生します。Word とアプリケーションが互いに待機しているように見えるため、待機して再試行しても機能しません。
他に使用できるイベントはありますか?おそらくユーザーが保存したくないので、アラートをバイパスして自動的に保存することはできません。