6

大量のデータ行を含む大きな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;
}

だから私が探している2つのこと:

  1. プログレスバーの最大値を設定します。
  2. ステップインデックスを正しく設定します。

前向きになれる方法を教えてください。

4

1 に答える 1

7

Progressbar.Maximum を 100 に保ちます。次に、読み取りデータを int 変数で追跡します。UI スレッドでループを実行し (タイマーを使用してこれを行うことができます)、読み取りバイトをチェックして進行状況バーのパーセントの値を設定します。たとえば、読み取りバイトを格納し、ファイルのサイズを含むとしますint totalRead;int totalFileSize

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

これをタイマーティックイベントハンドラーに入れることができます。これにより、進行状況バーが 100% まで徐々に実行されます。ファイルの読み取りが完了したら、タイマーを無効にします。

于 2012-09-16T05:48:01.660 に答える