我有解析功能,解析文件需要很长时间。 我想在解析文件的函数中显示进度条。 我添加toolstripprogressbar并设置其属性。 但是我不知道它们是如何同步运行的。
我想做这样的事情:
// progressBar start progress
parseFile();
// progressBar finish progress
我搜索了它,for循环和线程用于此,但它们对我没用。 我怎么能这样做?
答案 0 :(得分:4)
你真的需要在后台线程中运行长时间运行的操作,后台线程可以定期向GUI线程报告它的工作方式(并在此过程中更新进度条)。
我建议你阅读背景工作者,http://www.dotnetperls.com/backgroundworker
MSDN页面:http://msdn.microsoft.com/en-us/library/8xs8549b.aspx
您还可以在此处看到一个非常相似的SO问题:C# Winform ProgressBar and BackgroundWorker
答案 1 :(得分:1)
如果要显示进度,则必须以某种方式在长期或处理的数据间隔上划分长进程 - 并在处理完eash阶段/间隔后增加进度条位置。
3个阶段的示例: 将ProgressBar最大值设置为3。 阶段1)打开并读取文件到内存 - 完成此操作后将progressBar.Value设置为1 阶段2)解析文件 - 之后将progressBar.Value设置为2 阶段3)额外处理? - 之后设置progressBar.Value为3 = Max =过程完成。
文件大小示例: 让我们假设您可以测量到目前为止已解析的文件的哪个部分(以字节为单位)。然后首先将progressBar.Max设置为文件大小(以字节为单位)。然后,在每个处理完的文件块之后,您应该将progressBar.Value设置为已处理的字节数。
第二种方法通常更精确,progressBar运行得更顺畅,但并不总是可以使用它。