0

解析機能がありますが、ファイルを解析して時間がかかります。関数がファイルを解析している間、進行状況バーを表示したいと思います。toolstripprogressbar を追加し、そのプロパティを設定します。ただし、それらが同期的に実行される方法はわかりません。

私はこのようなことをしたい:

// progressBar start progress
parseFile();
// progressBar finish progress

ループとスレッドがこれに使用されているため、検索しましたが、役に立ちません。これどうやってするの?

4

2 に答える 2

4

バックグラウンド スレッドで実行時間の長い操作を実際に実行する必要があります。バックグラウンド スレッドは、実行状況について定期的に GUI スレッドに報告できます (そして、その過程でプログレス バーを更新します)。

バックグラウンド ワーカーについて読むことをお勧めします。ここはhttp://www.dotnetperls.com/backgroundworkerです。

MSDN ページはこちら: http://msdn.microsoft.com/en-us/library/8xs8549b.aspx

また、非常によく似た SO の質問もここで見ることができます: C# Winform ProgressBar and BackgroundWorker

于 2011-12-02T09:28:43.807 に答える
1

進行状況を表示したい場合は、ステージまたは処理されたデータ間隔のいずれかで長いプロセスを何らかの方法で分割し、各ステージ/間隔が処理された後にプログレスバーの位置を増やす必要があります。

3 つのステージの例: ProgressBar の最大値を 3 に設定します。ステージ 1) ファイルを開いてメモリに読み込みます - この終了後に progressBar.Value を 1 に設定します ステージ 2) ファイルを解析します - その後、progressBar.Value を 2 に設定します ステージ 3) 追加の処理? - その後、progressBar.Value を 3 = Max = プロセス完了に設定します。

ファイル サイズの例: ファイルのどの部分を解析したかをバイト単位で測定できるとします。次に、progressBar.Max をバイト単位のファイル サイズに設定します。次に、ファイルからバイトのブロックが処理されるたびに、progressBar.Value を処理されたバイト数に設定する必要があります。

通常、2 番目の方法はより正確で、progressBar はよりスムーズに実行されますが、常に使用できるとは限りません。

于 2011-12-02T09:29:30.730 に答える