我已經編寫了一個小程序(ProcessSample)來啓動在.txt文件中定義的另一個程序(以換行符分隔)。立即啓動多個程序
代碼大部分來自MSDN。我剛開始我的編程冒險,但我想寫一些有用的東西。
我不知道從我的ProcessSample程序同時運行兩個程序的智能方法。
在我的.txt文件中,我只是使用.exe程序的路徑。這一切工作正常,但我的程序當時只運行一個程序。我以爲我會運行foreach,但當然它不會在這裏工作,因爲它只運行第一個程序,它會等到我退出時纔會運行下一個程序。
所以我知道它不工作的原因。我只是想知道如何讓它按我想要的方式工作。
我的C#代碼:
using System;
using System.Diagnostics;
using System.Threading;
namespace ProcessSample
{
class ProcessMonitorSample
{
public static void Main()
{
Console.BufferHeight = 25;
// Define variables to track the peak memory usage of the process.
long peakWorkingSet = 0;
string[] Programs = System.IO.File.ReadAllLines(@"C:\Programs\list.txt");
foreach (string Program in Programs)
{
Process myProcess = null;
// Start the process.
myProcess = Process.Start(@Program);
// Display the process statistics until
// the user closes the program.
do
{
if (!myProcess.HasExited)
{
// Refresh the current process property values.
myProcess.Refresh();
// Display current process statistics.
Console.WriteLine();
Console.WriteLine("Path: {0}, RAM: {1}", Program, (myProcess.WorkingSet64/1024/1024));
// Update the values for the overall peak memory statistics.
peakWorkingSet = myProcess.PeakWorkingSet64;
if (myProcess.Responding)
{
Console.WriteLine("Status: Running");
}
else
{
Console.WriteLine("Status: Not Responding!");
}
// Wait 2 seconds
Thread.Sleep(2000);
} // if
} // do
while (!myProcess.WaitForExit(1000));
Console.WriteLine();
Console.WriteLine("Process exit code: {0}", myProcess.ExitCode);
Console.WriteLine("Peak physical memory usage of the process: {0}", (peakWorkingSet/1024/1024));
Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
} // foreach
} // public
} //class
} // namespace
如果程序已經完成它的執行你明確檢查:「如果(!myProcess.HasExited)「和」while(!myProcess.WaitForExit(1000));「 –
不按預期工作的原因是因爲你進入循環,啓動程序並等待程序結束後再開始下一個循環。您應該將循環中的進程監視移到另一個Thread上,以便所有程序都可以立即啓動。 – Nunners