c# - 进度条和文件加载

标签 c# file progress-bar backgroundworker

我有一个包含大量数据行的大型文本文件。在我的应用程序中,我打开此文件,通过匹配正则表达式读取每一行并将其显示在 Datagridview 中。生成的总行数约为 2000(有时甚至更多,非常庞大)。

所以对于所有这些操作,它需要相当多的时间。因此,我使用后台工作程序将这段代码移动到另一个线程中,一切都很好,除了我想在我失败的进度条中显示加载状态。

我使用 FileInfo 类来获取文件长度,然后将此值赋给 Progressbar.Maximum。似乎不是正确的方法,因为包含“3”行的测试文件返回的文件长度为“305”。我不明白我应该以这种方式给出多少步长间隔。

代码示例:

FileInfo ff = new FileInfo(openFileDialog1.FileName);
int fsize= Convert.ToInt32(ff.Length);
int val=1;
pgbar_load.Invoke(new MethodInvoker(delegate { pgbar_load.Maximum = fsize; }));

在循环中:

++val;
wk.ReportProgress(val);

然后:

private void bgwrkr_load_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
   pgbar_load.Value = e.ProgressPercentage;
}

所以我正在寻找两件事:

  1. 设置进度条的最大值。
  2. 正确设置步骤索引。

请建议我前进的方式。

最佳答案

将 Progressbar.Maximum 保持在 100。然后在一个 int 变量中跟踪您读取的数据。在 UI 线程上运行一个循环(您可以使用计时器来执行此操作),通过检查读取的字节来设置进度条百分比的值。例如。假设您将读取的字节存储在 int totalRead; 中,并且 int totalFileSize 包含文件的大小。

myProgressBar.Value = Convert.ToInt32(Math.Ceil(100d * totalRead/totalFileSize));

您可以将其放入您的计时器滴答事件处理程序中。这将使进度条逐渐运行到 100%。文件读取完成后,禁用计时器。

关于c# - 进度条和文件加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12444661/

相关文章:

c# - 按值对 <key, value> 对进行高效排序

c# - 带有自定义 DateTimeFormatInfo 的 DateTime.Parse 抛出异常

bash - 为什么 bash 有时不将 python 程序的输出刷新到文件中

php - 使用 PHP Regex 编辑 CSS 文件

javascript - 内联进度条动画,更改触发器以从加载滚动?

c# - 在MVVM中处理事件时如何发送事件处理程序的第二个参数?

c# - WPF 中 DataGrid 的双向绑定(bind)

linux - Bash 不会在嵌套脚本中创建文件

javascript - 如何获取进度条加载正文内容并隐藏在 100%?

javascript - 在 Google Apps 脚本中从服务器端通信到客户端