私の提案は、センチネル フラグを宣言することです。
private bool isWordApplicationOpen;
インスタンスを初期化するときApplication
に、そのイベントをサブスクライブし、Quit
そこからフラグをリセットします。
MyApp = new Word.Application();
MyApp.Visible = true;
isWordApplicationOpen = true;
((ApplicationEvents3_Event)MyApp).Quit += () => { isWordApplicationOpen = false; };
// ApplicationEvents3_Event works for Word 2002 and above
次に、ループで、フラグが設定されているかどうかを確認します。
while (isWordApplicationOpen)
{
// Perform work here.
}
編集: Word アプリケーションが閉じられるまで待つだけでよいことを考えると、次のコードの方が適している可能性があります。
using (ManualResetEvent wordQuitEvent = new ManualResetEvent(false))
{
Word.Application app = new Word.Application();
try
{
((Word.ApplicationEvents3_Event)app).Quit += () =>
{
wordQuitEvent.Set();
};
app.Visible = true;
// Perform automation on Word application here.
// Wait until the Word application is closed.
wordQuitEvent.WaitOne();
}
finally
{
Marshal.ReleaseComObject(app);
}
}