【发布时间】:2011-04-17 11:19:03
【问题描述】:
我需要从我的应用程序中运行多个外部可执行文件实例。此可执行文件的平均运行时间约为 3 分钟。 我想重定向这些进程的输出,并更新我的 GUI 中的进度条。 当然,我不想等他们回来再继续使用我的应用程序。
我认为我应该为每个实例创建一个线程,并在线程完成时更新我的进度条。
这是正确的方法吗?
另外,您是否推荐一个好的资源/文档来了解它的工作原理?我只找到了http://www.dotnetperls.com/threadpool。
edit :这些进程是基于网络的,即:运行时间可能会因链路延迟/带宽而有很大差异。
关于进度条,我想在每次进程完成时更新它。有处理程序吗?稍后我将根据流程输出添加更详细的更新,以增加每个执行步骤的进度。
编辑 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
}
这是正确的还是有更优雅的方法来实现这一点? 我当然不希望我的应用程序在执行期间被阻止。 为此使用后台工作人员会更好吗?
标签: c# wpf multithreading process external