0

100 回の反復後に停止するバックグラウンド ワーカーがあります。このような:

    BackgroundWorker bgWorker = new BackgroundWorker();
    bgWorker.WorkerReportsProgress = true;
    bgWorker.WorkerSupportsCancellation = true;

    bgWorker.DoWork += new OpenNETCF.ComponentModel.DoWorkEventHandler(this.bgWorker_DoWork);
    bgWorker.RunWorkerCompleted += new OpenNETCF.ComponentModel.RunWorkerCompletedEventHandler(this.bgWorker_RunWorkerCompleted);
    bgWorker.ProgressChanged += new OpenNETCF.ComponentModel.ProgressChangedEventHandler(this.bgWorker_ProgressChanged);


    private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
    {
            for(i=0; i<300; i++)
            {   
                bgWorker.ReportProgress(i, i);
            }

    }


    private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        this.labelProgress.Text = e.UserState.ToString(); 
    }

    private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        MessageBox.Show("finished loading...");
    }

labelProgress の値が 100 で停止し、メッセージボックスがポップアップして「ロードが完了しました...」と表示されます。

誰でも何が悪いのか考えています。スレッドが 101 回の反復で停止するのはなぜですか?

前もって感謝します。

4

2 に答える 2

3

コードが BGW スレッドをクラッシュさせています。null でない場合は、RunWorkerCompleted イベント ハンドラーで e.Error の値を必ず表示してください。

Backgroundworker.ReportProgress の MSDN ライブラリの記事から:

percentProgress
タイプ: System.Int32

完了したバックグラウンド操作のパーセンテージ (0 から 100)。

修理:

 bgWorker.ReportProgress(0, i);
于 2010-03-26T10:58:26.517 に答える