Process.Start()的进度条

时间:2012-09-26 10:18:54

标签: c# progress-bar backgroundworker system.diagnostics

我在这个问题上尝试了很多链接,却找不到任何帮助。我有这个代码,我执行.exe文件,从网页检索数据,并在我的列表框上显示结果。这需要时间和窗口冻结,我决定使用BackgoundWorker,但所有示例都使用循环来更新进度条,在我的情况下没有循环,我如何使我的进度条增量?请帮我这个,这是我的代码,

        labelstat.Text = "Please wait..";
        // Start the child process.
        Process p = new Process();


        // Redirect the output stream of the child process.
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        p.StartInfo.CreateNoWindow = true;
        p.StartInfo.FileName = "Out.exe";

        p.Start();
        // Do not wait for the child process to exit before
        // reading to the end of its redirected stream.
        // p.WaitForExit();
        // Read the output stream first and then wait.
        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();

        checkedListBox1.Items.AddRange(output.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries));

我试过把它放在,

        backgroundWorker_DoWork

方法,它在后台执行我的任务,但我不知道如何根据我的代码执行的过程增加进度条? :(非常感谢你..

1 个答案:

答案 0 :(得分:0)

不确定您是否能够更改进度条,毕竟您如何知道该程序的工作百分比。你可以做的是保持UI响应。您可能已经使用后台工作程序完成了这项工作,但是当程序写入输出流时,您可以通过向UI添加行来完成更多工作(尽管假设它需要下载数据,您可能会发现没有输出那就完成了所有这一切。)

您可以通过创建一个运行到p.HasExisted的循环(表示程序已完成)来完成此操作。在该循环中,您将报告进度(BackgroundWorker.ReportProgress),可能到目前为止传入输出字符串数组。然后,在后台工作程序的进度更改事件处理程序中,您将使用在报告进度时传入的数组对象更新UI。