我需要從我的應用程序運行外部可執行文件的多個實例。這個可執行文件的平均運行時間約爲3分鐘。 我想重定向這些進程的輸出,並更新我的GUI中的進度條。 當然,我不想等他們回來,然後才能繼續使用我的應用程序。C#並行運行多個非阻塞外部程序
我想我應該爲每個實例創建一個線程,並在線程完成時更新我的進度條。
這是正確的做法嗎?
另外,你是否建議一個很好的資源/文檔來了解它是如何工作的?我只發現http://www.dotnetperls.com/threadpool。
編輯:這些進程是基於網絡的,即:運行時間可能因鏈路延遲/帶寬而異。
關於進度條,我想每次過程結束時更新它。有沒有一個處理程序?稍後,我將根據流程輸出添加更詳細的更新,以增加每個執行步驟完成的進度。
編輯2:
感謝您的投入。由於我可能需要運行很多進程(最多20次),並且我不想飽和帶寬,所以我會並行運行5個最大值。每次過程結束後,我遞增進度計數器(我的進度條),我運行一個又一個,直到他們全部建成後,使用:
Process p = new Process();
p.StartInfo.FileName = pathToApp;
p.EnableRaisingEvents = true;
p.Exited += OnCalibrationProcessExited;
p.Start();
private void OnCalibrationProcessExited(object sender, EventArgs e)
{
runAnotherOne function
}
它是正確的還是有一個更優雅的方式來實現這個 ? 我不希望我的應用在執行過程中被阻止。 爲此使用後臺工作者更好嗎?
根據您的編輯,我在回覆中添加了更多評論 – 2011-04-17 17:19:13
如果您使用.Net 4,則可以使用任務並行庫,而不用擔心自己管理進程:http://msdn.microsoft.com/EN-US /庫/ dd537609。aspx – joce 2011-05-15 14:06:35