加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 进度条和文件加载

发布时间:2020-12-15 08:40:14 所属栏目:百科 来源:网络整理
导读:我有一个包含大量数据行的大型文本文件.在我的应用程序中,我打开此文件,通过匹配正则表达式读取每一行并在Datagridview中显示它.生成的总行数约为2000(有时甚至更多,非常巨大). 因此,对于所有这些操作,需要相当长的时间.所以我使用后台工作程序将此代码移动
我有一个包含大量数据行的大型文本文件.在我的应用程序中,我打开此文件,通过匹配正则表达式读取每一行并在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;
}

所以我要找的两件事:

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

请建议我前进的方法.

解决方法

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

您可以将它放在计时器刻度事件处理程序中.这将逐步将进度条运行到100%.文件读取完成后,禁用计时器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读