2017-07-20 47 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类都记录在案 –

相关问题