gpt4 book ai didi

C# 基于文件行数的进度条

转载 作者:行者123 更新时间:2023-11-30 20:48:21 26 4
gpt4 key购买 nike

我想在 C# 中执行以下操作:

  1. 读取特定文本文件中的行数。
  2. 根据文本文件中的行数,阅读每一行并更新进度条。

这是我目前所拥有的:

private void Form1_Load(object sender, System.EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
int lineCount = 0;
int max = 100;
float percent;
using (var reader = File.OpenText(@"C:\file.txt"))
{
toolStripLabel1.Text = "Initializing...";

while (reader.ReadLine() != null)
{
lineCount++;
}
reader.Close();
for (int i = 0; i < lineCount; i++)
{
percent = (max / lineCount);
toolStripLabel1.Text = i.ToString() + " - " + percent + "%";
bw.ReportProgress(Convert.ToInt32(percent));
percent = percent + percent;
// Thread.Sleep(100);

}
}
}

private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
// progressBar1.Value = (int)(((decimal)currentPosition / (decimal)length) * (decimal)100);
this.Text = e.ProgressPercentage.ToString();
}

有人知道如何根据从文件中读取的行来正确计算和显示进度条吗?

提前致谢!

最佳答案

你的代码有几个问题:

  1. 您首先读取文件,然后在读取完所有文件后开始更新进度条,这实际上没有任何意义。
  2. 您在百分比计算中进行整数除法。
  3. 百分比计算不太正确。
  4. 您正在从工作线程更新 ToolStripLabel。

试试这个:

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
var files = File.ReadAllLines( @"C:\file.txt" );
for( int i = 0; i < files.Length; i++ )
{
var line = files[i];

// do work on the current line here

int percentage = (int)( ( i / (double)files.Length ) * 100.0 );
bw.ReportProgress( percentage );
}
}

private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
toolStripLabel1.Text = e.ProgressPercentage.ToString() + "%";
this.Text = e.ProgressPercentage.ToString();
}

如果文件很大,真正的阅读需要时间,你应该回到原来的阅读方式,但是更新每一行的进度,而不是之后。不过,您又回到了在阅读文件之前不知道有多少行的问题。在这种情况下 - 您可以根据已读取的字节数/字符数与文件的完整大小相比来估算进度,无需全部读取即可获得。

关于C# 基于文件行数的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24721785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com