- ベストアンサー
プログレスバーで処理進捗を反映させる方法とは?
- backgroundWorkerを使用して重たい処理を実行する際に、プログレスバーで処理の進捗を表示する方法について悩んでいます。参考にしているページではforループを使用しているため、どのようにプログレスバーに反映させれば良いかわかりません。
- 処理自体は仕様通りに行われていますが、大容量のファイルなどを扱うために時間がかかるため、ファイルコピーなどの各処理が完了するたびにプログレスバーに進捗を表示したいです。
- 具体的な処理内容としては、ファイルの読み込み、ファイルのコピー、テキストの書き込みなどがありますが、これらの処理を何千回も繰り返す必要があります。どのようにすればプログレスバーに正確な進捗が表示できるか、教えていただけないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
要は、worker.ReportProgress(percentage)を percentage値を適当に少しずつ増やしながら 発行していけばよいだけです。 あなたが意図しているプログレスバーは、 「こんな類似処理を何千回もする」というのを 全部完了した段階で100%にするものですか? そうであれば、その何千回ものループの中で 現在のループ回数/予定ループ回数の%値を percentageに入れてworker.ReportProgress(percentage) を発行するだけです。 何千回もループするのであれば、数十回ループして やっと1%増加するような進捗表示になると思います。 それとも、何千回ループの1回の処理の中で0%→100%に変化させ、 それを何千回か繰り返すようにしたいのでしょうか? そうであれば、各処理にだいたいどれくらいの時間がかかるか あらかじめ計測し、各処理ポイントで決めた%値をpercentageに入れて worker.ReportProgress(percentage)を発行すればよいと思います。 プログレスパーなんて、しょせん「だいたいどれくらいの進捗率か」 を表すものでしかありません。環境によっては、90%まですぐに進捗 するのに、残り10%の処理に5分かかるような表示をするがよくあったりします。
その他の回答 (1)
- neko1963
- ベストアンサー率49% (127/258)
|ファイル読み込み |ファイルコピー |テキスト開く |1000行書きこむ(繰り返しでかけないので1行1行書き込み) |テキスト閉じる |ファイル読み込み |ファイルコピー |ファイルの内容を検査して間違いを修正 |ファイルをリネーム |ファイルを指定したサーバのパスにバラ撒く が1つの処理単位と解釈できるのであれば、この処理単位ごとにプログレスバーを1ステップ進めれば良いように思いますが・・・。
お礼
ありがとうございました。参考になりました。
お礼
ありがとうございました。参考になりました。