【发布时间】:2015-02-25 04:09:51
【问题描述】:
我希望我的程序等待所有进程完成,然后删除一些临时文件。我已经有一段代码可以在一次处理一个进程时执行此操作,但我无法使其适用于多个进程。
我将首先展示有效的代码。此代码正确运行一个进程,等待它完成,然后删除临时文件:
foreach (string script in scriptList)
{
ProcessStartInfo myProcess = new ProcessStartInfo();
myProcess.FileName = accoreconsolePath;
myProcess.Arguments = "/s \"" + script + "\"";
myProcess.CreateNoWindow = true;
Process myWait = Process.Start(myProcess);
myWait.WaitForExit();
File.Delete(script);
}
以上内容巧妙地包含在foreach 循环中。我无法工作的是 parallel 版本,其中等待语句位于 foreach 循环之外:
Process myWait;
foreach (string script in scriptList)
{
ProcessStartInfo myProcess = new ProcessStartInfo();
myProcess.FileName = accoreconsolePath;
myProcess.Arguments = "/s \"" + script + "\"";
myProcess.CreateNoWindow = true;
myWait = Process.Start(myProcess);
}
myWait.WaitForExit(); //error: use of unassigned local variable "myWait"
//delete file would go here
我想我只需要在进入foreach 循环之前初始化myWait,但我不知道该怎么做。如何初始化进程而不将其分配给任何东西?还有其他一些简单的方法可以做到这一点吗?
【问题讨论】:
-
List<Process> myWait = new List<Process>(); -
看看这个非常相似的问题:stackoverflow.com/a/23741387/594832
标签: c# process parallel-processing wait