0

サーバーからファイルをダウンロードする際に使用する方法があります。MY メソッドは正常に動作しますが、実行の各インスタンスで計算されたプロセス実行のパーセンテージを返したいと考えています。以下のように、backgroundworker を使用して、プログレスバーに backgroundworker_changed メソッドを使用しようとしました。

  bw.WorkerReportsProgress = true;
            bw.WorkerSupportsCancellation = true;
            bw.DoWork += new DoWorkEventHandler(bw_DoWork);
            bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
            bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);

ボタンのクリックでワーカーを開始します。

private void btnStart_Click(object sender, EventArgs e)
        {


                if (bw.IsBusy != true)
                {

                    bw.RunWorkerAsync();

                }

        }

worker_changed メソッド

 private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar.Value = e.ProcessPercentage;
        }

私の問題は、DoWork() メソッドから進捗状況を報告する必要があることを理解しています。どうすればそれを達成できますか?私はこのようなことを考えました。

  private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar.Value = Convert.ToInt32( e.UserState );

        }

DoWork から進行状況が返されなかったため、まだ起動しません。どんな助けでも大歓迎です。

4

2 に答える 2

0

msdnのこの公式チュートリアルで説明されているように。メソッド内で進行状況の変更を自分で報告する必要がありますDoWork。例を次に示します。

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker worker = sender as BackgroundWorker;

    worker.ReportProgress(10/*the percentage you want*/);
}

BackgroundWorker.ProgressChangedイベント:

ReportProgress メソッドを呼び出すと発生します

また、次のように設計されています。

ユーザー インターフェイスの更新など、進行状況を示すコードを追加します。

BackgroundWorker.RunWorkerCompletedイベント:

バックグラウンド操作が完了したとき、キャンセルされたとき、または例外が発生したときに発生します

DoWorkどちらのイベントも、メソッドが失敗した、終了した、またはメソッドが呼び出されたときに呼び出されることを意図していますReportProgress。つまり、いつ発生するかを決めるのはあなただと言えます。それはあなたの行動なしにはできません。それはあなたのプロセスであり、それがいつ 20%、30%、100% (など...) 完了したかを知るのはあなただけです。

于 2013-11-01T10:24:30.003 に答える