2017-07-20 49 views
1

我有這樣的代碼:WaitForExit不工作時,應用程序已經運行

Process MSWprocess = new Process(); 
if (CommandToMSWord[1][1] == "Edit") 
{ 
    MSWprocess = Process.Start(PatientLetterDocx); 
} 
MSWprocess.WaitForExit(); 
if (CommandToMSWord[2][1].ToUpper() == "FALSE" && MSWprocess.HasExited) 
{ 
    File.Delete(PatientLetterDocx); 
} 

其中MSWprocess將打開一個微軟Word文件,如果用戶想要自動保存這個退出,CommandToMSWord[2][1].ToUpper()應爲TRUE,否則該文檔將在關閉MS Word文檔時被刪除。

當我第一次執行程序時,它會等到MS Word關閉。當第一個實例仍在運行時仍然運行同一程序的另一個實例(仍在等待MS字被關閉)時,第二個實例不再關心WaitForExit(),並且由於程序是刪除仍然打開的文件。

我喜歡的是,即使程序同時運行多次,WaitForExit()應該每次都做到這一點。

你有什麼想法,爲什麼這不適用於多個實例同時?

在此先感謝。

回答

0

您應該聲明MSWprocess作爲本地變量。由於每次運行此代碼段時都會覆蓋實例變量。試試這個。

var MSWprocess = Process.Start(PatientLetterDocx); 
+0

我編輯了我的給定代碼,這就是我的源代碼,所以我無法使用你的答案。 – spn

1

這是因爲Word的工作原理。當Word進程正在運行並且您午餐進行另一個進程時,信息會傳遞給第一個進程並退出第二個進程。該文件是真正打開的第一個過程。您可以使用command line switches爲單詞運行文件的單獨過程。如果我沒有記錯,它是/t,雖然我目前沒有安裝Word,所以我無法檢查這個。

+0

關於如何在Process.Start()中使用此開關,您有任何想法嗎? – spn

+0

@spn閱讀Process類的文檔。幾乎所有的.net類都記錄在案 –

相關問題