2013-05-29 47 views
2

我的應用程序使用Word interop進行「主動報告」功能。當Word文檔從應用程序中啓動,我們設置的EventWaitHandle暫停應用程序(創造一個「模式」效果),直至關閉文檔:Word Interop:接近Word的事件

wh.WaitOne(); 

我們已經設置Word應用程序退出事件的事件,在這裏我們則設置等待的EventWaitHandle的應用程序繼續

wordGenerator.WordApplication.ApplicationEvents2_Event_Quit += WordApplication_ApplQuit; 

private void WordApplication_ApplQuit() 
    { 
     wh.Set(); // signal that word has closed 

     wordGenerator.Dispose(); 
     wordGenerator = null; 
    } 

在此之後被調用時,應用程序然後讀取它存儲位置的文檔,並將其保存到我們的數據庫。所有作品都很棒。除非...用戶在文檔中進行更改,而不是CTRL + S,而是單擊關閉並獲得「您想保存更改」提示的提示。

在這種情況下,只要單擊Word中的關閉,就會觸發退出事件,但在保存更改的對話框存在的同時,Word仍處於打開狀態。當嘗試讀取文檔以保存到數據庫時,應用程序繼續運行並獲取IO異常「文檔正在被另一個進程使用」。即使等待和重試也不起作用,因爲看起來Word和應用程序正在彼此等待。

是否有另一個事件可以使用?我無法繞過警報並自動保存,因爲用戶可能不想保存。

+0

你能得到Word的過程對象嗎? –

回答

1

問題解決了......這一次很簡單。移動.Set()之上的處理代碼。

private void WordApplication_ApplQuit() 
{ 

    wordGenerator.Dispose(); 
    wordGenerator = null; 

    wh.Set(); // signal that word has closed 

}