0

我有一个解析函数,它解析一个文件并且需要很长时间。我想在函数解析文件时显示进度条。我添加了工具条进度条并设置了它的属性。但是我不知道它们是如何同步运行的。

我想做这样的事情:

// progressBar start progress
parseFile();
// progressBar finish progress

我搜索了一下,for循环和线程用于此,但它们对我没有帮助。我怎样才能做到这一点?

4

2 回答 2

4

您确实需要在后台线程中运行长时间运行的操作,该线程可以定期向 GUI 线程报告其运行情况(并在此过程中更新您的进度条)。

我敦促您阅读有关后台工作人员的信息,此处为http://www.dotnetperls.com/backgroundworker

MSDN 页面在这里:http: //msdn.microsoft.com/en-us/library/8xs8549b.aspx

您还可以在这里看到一个非常相似的 SO 问题:C# Winform ProgressBar and BackgroundWorker

于 2011-12-02T09:28:43.807 回答
1

如果您想显示进度,那么您必须以某种方式将您的长流程划分为阶段或已处理的数据间隔 - 并在处理完阶段/间隔后增加进度条位置。

3 个阶段的示例:将 ProgressBar 最大值设置为 3。阶段 1) 打开文件并将其读取到内存 - 完成此阶段后将 progressBar.Value 设置为 1 2) 解析文件 - 在此阶段后将 progressBar.Value 设置为 2 阶段 3) 附加处理? - 之后将 progressBar.Value 设置为 3 = Max = 进程完成。

文件大小示例:假设您可以测量到目前为止已解析的文件的哪一部分,以字节为单位。然后首先将 progressBar.Max 设置为文件大小(以字节为单位)。然后,在文件中每个已处理的字节块之后,您应该将 progressBar.Value 设置为已处理的字节数。

第二种方法通常更精确,progressBar 运行更顺畅,但并不总是可以使用它。

于 2011-12-02T09:29:30.730 回答