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