我有一个大的text file
包含大量的数据行。在我的应用程序中,我打开这个文件,通过匹配正则表达式读取每一行,并将其显示在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;
}
所以两两件事是我在寻找:
- 设置进度条的最大值。
- 正确设置步骤索引。
请给我一种前进的方法。
我怎样才能每次读取总读取字节,我的意思是int totalRead值?首先,我读取所有文件并将数据存储在通用列表中。然后在一个循环中,我更新了显示进度的datagrid的每一行。 – Cdeez
你可以看看我在做什么的问题中添加的代码。 – Cdeez
对这个答案的编辑很少会给出结果--- 'totalRead'和'totalFilesize'应该是'double'值,因为如果它们是整数,结果总是为零(将结果类型转换为整数)和100d * 0 = 0。和'Math.Ceiling();' – Cdeez