2016-09-15 79 views
0

我有一個應用程序打開新的Word文檔,讓用戶更新和保存,然後他們可以通過點擊右上方的X關閉Word,或者他們可以關閉應用程序中的單詞。如何在關閉Word文檔之前檢查打開的對話框?

問題出現在用戶進行編輯時,點擊X在Word的右上角,保存對話框顯示,用戶忘記點擊保存,但隨後嘗試關閉應用程序中的文件。應用程序認爲它使用以下代碼行成功關閉了文檔:

WordApp.Documents[docUri].Close(WdSaveOptions.wdDoNotSaveChanges); 

但對話框仍處於打開狀態,但文檔尚未關閉。代碼中沒有例外或警告。

有沒有辦法檢查現有的打開對話框窗口並繞開代碼打開的對話框?

回答

0

這不是我對這個問題的理想解決方案,但現在,它的工作原理...

當一個對話窗口,在您要關閉文檔的時間開放,您可以搭乘收到COMException和閱讀HResult ID來控制對異常做出反應的方式。這是我發現的Open Dialog問題以及Word意外關閉的結果。

catch (System.Runtime.InteropServices.COMException ex) 
      { 
       switch (ex.HResult) 
       { 
        case -2147417846: //Dialog box is open and blocking us 
         context.Clients.All.addMessage("CloseWord", "Can't close Word, please check for open dialog box"); 
         return; 

        case -2147023174: //Word Instance died without us knowing, need to set back to null to recover 
         context.Clients.All.addMessage("CloseWord", "Word Failed, attempting to recover..."); 
         break; 

        default: //this is to catch the unknown and bubble up the details 
         context.Clients.All.addMessage(
          string.Format("CloseWord", "Oops... Something went wrong Code {0} Message: {1}", ex.HResult, ex.Message)); 
         return; 

       } 
      }