我这里有问题.....
我有一个ProcessStartInfo列表为List<ProcessStartInfo>
我想在Series
启动流程,即
如果我启动第一个流程,那么列表中的第二个流程应该仅在第一个流程(退出或中止)时启动...
我试着像......
private void startSeriesExecution()
{
List<string> programpath = new List<string>();
programpath.Add(@"C:\Program Files\Internet Explorer\iexplore.exe");
programpath.Add(@"C:\Program Files\Microsoft Office\Office12\WINWORD.EXE");
foreach (var VARIABLE in programpath)
{
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = VARIABLE,
Arguments =
"www.google.com"
};
try
{
using (Process process=Process.Start(startInfo))
{
if (process.WaitForExit(Int32.MaxValue))
{
continue;
}
}
}
catch (Exception)
{
continue;
}
}
}
我正在使用自定义类进行多线程运行startSeriesExecution
所有进程同时执行....
private void Button_Click(object sender, RoutedEventArgs e)
{
// This function starts the Execution in different thread
Start.Work(startSeriesExecution).OnComplete(onSeriesExecutionComplete).Run();
}
我还观察了一件事......
如果1进程已在运行...让我们说IE已经运行了,现在我执行startSeriesExecution()
并在此启动已经运行的进程(IE)...然后执行整个for循环..即,列表中的所有进程都被执行......
现在不知道要继续......
答案 0 :(得分:0)
该代码看起来会起作用。 WaitForExit将暂停该线程,直到完成。
此外,如果这些过程输出大量信息,那么您需要添加
process.ErrorDataReceived += new DataReceivedEventHandler(process_ErrorDataReceived);
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
无论哪个都是个好主意,否则进程可能会挂起,直到输出和错误字段被清除,这可能永远不会发生。
将事件添加到流程将使它们保持输出,因此不会堵塞它。
更新:
如果您想检查某个流程是否已在运行,您可以这样做:stackoverflow.com/a/51149/540339
然后你必须使用Thread.Sleep(xxxx)循环并等待,直到该进程关闭。