我有这个代码:
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字关闭)时,第二个实例不再关心WaitForExit()
并导致运行时间错误,因为程序正在删除仍处于打开状态的文件。
我喜欢的是,即使程序同时运行多次,WaitForExit()
每次都应该真正发挥作用。
您是否有任何想法为什么它不能同时适用于多个实例?
先谢谢。
答案 0 :(得分:1)
这是因为Word的工作原理。当Word进程正在运行并且您在另一个进程中进行午餐时,信息将传递到第一个进程并退出第二个进程。第一个过程真正打开了该文档。您可以使用command line switches为文件运行单独的进程。如果我没记错,它是/t
,虽然我目前没有安装Word,所以我无法检查。
答案 1 :(得分:0)
您应该将MSWprocess
声明为本地变量。由于每次运行此代码段时都不会,因此它将覆盖实例变量。试试这个。
var MSWprocess = Process.Start(PatientLetterDocx);