我有以下代码:
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
将打开MS Word文档,如果用户想要在退出时自动保存,则CommandToMSWord[2][1].ToUpper()
应为TRUE,否则文档将在关闭MS Word文档时被删除。
当我第一次执行该程序时,它会一直等到MS Word关闭。当我执行同一程序的另一个实例时,第一个实例仍在运行(仍在等待MS word关闭),第二个实例不再关心WaitForExit()
,并导致运行时错误,因为该程序正在删除一个仍处于打开状态的文件。
我希望它是这样的,即使程序同时运行多次,WaitForExit()
每次都应该真正完成它的一部分。
你知道为什么多个实例不能同时工作吗?
提前谢谢。
发布于 2017-07-20 05:57:06
这是因为Word的工作方式。当Word进程正在运行时,当您启动另一个进程时,信息将传递给第一个进程并退出第二个进程。文档实际上是由第一个进程打开的。您可以使用command line switches让word为您的文件单独运行进程。如果我没记错的话,它是/t
,虽然我目前还没有安装Word,所以我不能检查这个。
发布于 2017-07-20 05:45:09
您应该改为将MSWprocess
声明为局部变量。因为您不是在每次运行此代码段时都这样做,它将覆盖实例变量。试试这个吧。
var MSWprocess = Process.Start(PatientLetterDocx);
https://stackoverflow.com/questions/45206014
复制