-3

2 つの機能を同時に実行したい。

最初の関数は、コンピューター内のファイルの総数をカウントし、結果を 1 つの DatagridView に表示します。

2 番目の関数では、1 つの進行状況バーの値がファイルの総数に応じて変更されます。つまり、すべてのファイルが DatagridView にバインドされると、進行状況バーの値が 100 に設定されます。

2 つの関数の作業を同期させたいです。2 つのスレッドを使用していますが、結果が表示されず、例外が発生しました。

私は何をすべきか ?

私のコードは

 ThreadStart threadstatr = new ThreadStart(Function_1);
 ThreadStart threaProgress = new ThreadStart(Function_2);
 Thread thread = new Thread(threadstatr);
 Thread threadpro = new Thread(threaProgress);
 thread.Start();
 threadpro.Start();
 thread.Join();
 threadpro.Join();

void Function_2()
    {
        int coun = ((Convert.ToInt32(label1.Text)) / 100); //here label1 represents total no. of files
        for (int i = 0; i < coun; i++)
        {
            backgroundWorker1.ReportProgress(i);
        }
    }

例外は「入力文字列が正しい形式ではありませんでした」です。ラベル自体が更新される機会がないため

4

2 に答える 2

0

別の回答と私のコメントを繰り返さないでください。しかし、あなたは聞いていないようです。

スレッドをドロップします。コードに ThreadStart がありません。

また、バックグラウンドから UI コントロールを読み取らないでください。
渡すデータ:

backgroundWorker1.RunWorkerAsync(numberToCompute);

バックグラウンド ワーカーを使用します。

これは、フォローする場合に必要なことを正確に行います。

BackgroundWorker クラス

于 2012-09-28T23:28:25.583 に答える
0

うーん、必要以上に複雑なようです。BackgroundWorker を使用すると、生の Thread オブジェクト (ThreadStart など) を完全に回避できます。

プログレスバーがインスタンス化されるメインアプリ/UI スレッドがあります。
を使用BackgroundWorkerしてスレッドをスピンアップして作業を実行したい - 作業 (ファイルの検索) メソッドをBackgroundWorker.DoWorkイベントに接続することによって。
そのメソッドは、メソッドを使用して進行状況を UI スレッドに報告できますBackgroundWorker.ReportProgress。UI スレッドは、BackgroundWorker.ProgressChangedイベントを処理することで、進行状況に反応する (進行状況コントロールをインクリメントする) ことができます。BackgroundWorker を作成するときに
忘れずに設定してください。BackgroundWorker.WorkerReportsProgress = true

これについては、BackgoundWorker のドキュメントを参照してください。

于 2012-09-28T14:10:38.567 に答える