私は大量のデータ行を含む大きな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;
}
だから、二つのこと:
- プログレスバーの最大値を設定します。
- ステップインデックスを正しく設定する。
私は前進する方法を提案してください。
どのように私はtotal totalRead値を意味するたびに、合計読み取りバイト数を読むことができますか?まず最初に、すべてのファイルを読み込み、そのデータを汎用リストに格納します。そして、ループで、進捗状況を表示しているDataGridの各行を更新します。 – Cdeez
私が何をしているのかという質問の中で、追加されたコードを見ることができます。 – Cdeez
この回答を編集しても結果は得られません--- 'totalRead'と' totalFilesize'は整数であれば、結果は常にゼロです(integerの結果の型キャスト)、100d * 0 = 0となる。そして、その 'Math.Ceiling();' – Cdeez