我在这个问题上尝试了很多链接,却找不到任何帮助。我有这个代码,我执行.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
方法,它在后台执行我的任务,但我不知道如何根据我的代码执行的过程增加进度条? :(非常感谢你..
答案 0 :(得分:0)
不确定您是否能够更改进度条,毕竟您如何知道该程序的工作百分比。你可以做的是保持UI响应。您可能已经使用后台工作程序完成了这项工作,但是当程序写入输出流时,您可以通过向UI添加行来完成更多工作(尽管假设它需要下载数据,您可能会发现没有输出那就完成了所有这一切。)
您可以通过创建一个运行到p.HasExisted
的循环(表示程序已完成)来完成此操作。在该循环中,您将报告进度(BackgroundWorker.ReportProgress),可能到目前为止传入输出字符串数组。然后,在后台工作程序的进度更改事件处理程序中,您将使用在报告进度时传入的数组对象更新UI。