我有一个使用System.Diagnostics.Process将命令发送到cmd.exe的函数,但是我需要遍历此命令的一组参数,每个循环都打开一个新的cmd.exe,该cmd.exe使用了很多不必要的cpu力量。
当前,我正在使用for循环,该循环递增到列表中的下一个项目以传递给ProcessStartInfo。我需要在自己的行上调用每个参数。 即。 / C myFunction.exe MyList [0] / C myFunction.exe MyList [1] ...等
我目前使用的代码通过myFunction.exe(在cmd.exe中调用),在给定外部for循环的情况下,将MyList中的值设置为0-24。
Process process = new Process();
ProcessStartInfo StartInfo = new ProcessStartInfo();
StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
StartInfo.FileName = "cmd.exe";
for (int j = 0; j < 25; j++)
{
for (int i = 0; i < Device_Numbers.Count; i++)
{
StartInfo.Arguments = "/C myFunction.exe " + i + " = " + j;
process.StartInfo = StartInfo;
process.Start();
}
Thread.Sleep(2000);
}
对cmd.exe的调用有效,但是它为通过i进行的每次迭代打开了一个新的cmd.exe窗口,如果我可以打开一个窗口并在那个窗口中对所有i进行迭代会更好。
答案 0 :(得分:0)
第一个using
块创建一个包含所有要执行命令的批处理文件。第二个using
块执行批处理文件。
using (StreamWriter sw = new StreamWriter("myFunctions.cmd"))
{
for (int j = 0; j < 25; j++)
{
for (int i = 0; i < Device_Numbers.Count; i++)
{
sw.WriteLine("myFunction.exe " + i + " = " + j);
}
}
}
using (Process process = new Process())
{
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.Arguments = "/C myFunctions.cmd";
process.Start();
process.WaitForExit();
}