2011-06-06 35 views
3

我在C#應用程序中使用Process.Start()執行3個exes。我想依次運行所有這些exes。現在,每個Process.Start()都以並行方式自行執行。在C#中執行多個Process.Start()#

如:

Process.Start(exe1ForCopying_A_50_Mb_File);  
Process.Start(exe2ForCopying_A_10_Mb_File); 
Process.Start(exe3ForCopying_A_20_Mb_File); 

我想我的第二Process.Start()開始執行後,才第一次Process.Start()完成複製50 MB的文件(這將採取約1或2分鐘)。

有什麼建議嗎?

謝謝。

回答

8

我想我自己得到了答案..! :)

Process process = new Process(); 
ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.FileName = MyExe; 
startInfo.Arguments = ArgumentsForMyExe; 
process.StartInfo = startInfo; 
process.Start(); 
process.WaitForExit(); // This is the line which answers my question :) 

感謝您的建議VAShhh ..

0

您可以:

+1

我覺得我得到了自己的答案..! :) Process process = new Process(); ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = MyExe; startInfo.Arguments = ArgumentsForMyExe; process.StartInfo = startInfo; process.Start(); process.WaitForExit(); //這是回答我的問題的線:) 感謝您的建議VAShhh .. – Sandeep 2011-06-06 11:26:25

+0

如果我已經很好地理解了這個問題,那麼您編寫的代碼會使並行進程結束時的程序「阻塞」或「等待」 。你確定這不會導致界面凍結嗎?使用事件不會這樣做 – VAShhh 2011-06-06 11:30:46

0

您可以啓動後臺線程或任務並在循環中同步等待(使用WaitForExit),也可以使用異步方法。

逐個創建Process對象,並將事件處理程序掛接到繼續執行下一個Process的Exited事件。使用Process構造函數創建它們,掛鉤Exited事件處理程序,然後調用Start;否則,使用靜態Process.Start,如果進程在Process.Start返回和附加事件處理程序之間失敗,我認爲事件處理程序不會被調用,因爲它嚴格已經退出。

證明的概念:(不處理處置,隊列訪問不是線程安全的,儘管它應該足夠了,如果它確實是串行的,等等)

Queue<Process> ProcessesToRun = new Queue<Process>(new []{ new Process("1"), new Process("2"), new Process("3") }); 

void ProcessExited(object sender, System.EventArgs e) { 
    GrabNextProcessAndRun(); 
} 

void GrabNextProcessAndRun() { 
    if (ProcessesToRun.Count > 0) { 
     Process process = ProcessesToRun.Dequeue(); 
     process.Exited += ProcessExited; 
     process.Start(); 
    } 
} 

void TheEntryPoint() { 
    GrabNextProcessAndRun(); 
} 
相關問題