4

特定のタスクを実行する前に、Word がまだ表示されているかどうかを確認しています。問題は、可視性のチェックで Word 2010 を閉じると、実行がフリーズすることです。2007 では発生しません。

//Initializing Word and Document

While(WordIsOpen())
{
}

//Perform Post Close Tasks

public bool WordIsOpen()
{
     if(MyApp.Application.Visible)//Execution just freezes at this line after Word is not visible
            return true;
     else
            return false;
}

この問題を以前に見た人はいますか?

これを確認するより良い方法はありますか?

4

1 に答える 1

3

私の提案は、センチネル フラグを宣言することです。

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);
    }
}
于 2012-06-14T21:34:38.400 に答える