0

ねえ、私はバックグラウンドワーカーに、パラメーターが変更されるたびにフォームのメインスレッドにパラメーターを返送させようとしています。

バックグラウンドワーカーが実行するメソッド内で私はこれを持っています

worker.ReportProgress(p);

pは、実行中のforループ内の変数です。

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        label6.Text = e.ToString();
    }

バックグラウンドワーカーがループを通過するときに、このラベルテキストをpに変更しようとしています。

助けてくれてありがとう!:)

4

4 に答える 4

3

ReportProgress2つの引数を取ります:

  1. ProgressPercentage(INTEGER)
  2. UserState(オブジェクト)

進捗率を気にしない場合は、送信0して使用しないでください。

worker.ReportProgress(0, p);

または、単一の引数のオーバーロードを使用して、進行状況のパーセンテージのみを送信することもできます。

ハンドラーにProgressChangedEventArgsは、使用する必要のあるいくつかのプロパティがあります。進捗率の値を取得するには、次のようにアクセスします

myPercentLabel.Text = e.ProgressPercentage.ToString;

ユーザーデータ(p)を取得するには、次のようにアクセスする必要があります。

label6.Text = e.UserState.ToString;

より複雑なデータを送信するには、ハンドラーで適切にキャストする限り、UserStateで任意のタイプのオブジェクトまたは構造を送信できます。いずれの場合も、ProgressPercentage またはUserStateプロパティにアクセスする必要がありますe

于 2012-06-21T19:05:45.500 に答える
1

合格する必要があります

worker.ReportProgress((int)(p*100.0/loopMaxValue));

次に使用します

label6.Text = e.ProgressPercentage.ToString();

それ以外の

label6.Text = e.ToString();
于 2012-06-21T19:05:17.413 に答える
1

これでいくつかの問題が発生する可能性があります。まず、バックグラウンドワーカーのループが比較的速い場合、値の変化が速すぎてラベルが追いつかない可能性があります。次に、テキストが設定されるたびにラベルがすぐに更新されるとは限らないため、一部の値をスキップする場合があります。最後に、実際に必要なのはe.ToString()ではなくe.UserState.ToString()だと思います。

于 2012-06-21T19:02:04.657 に答える
0

わかった!

これをしました...

    label6.Text = e.UserState.ToString();
于 2012-06-21T19:07:46.920 に答える