0
public static void CalculateAttributions(BackgroundWorker worker, string _filename, ComboBox cmb, OpenFileDialog open)
        {
            worker = new BackgroundWorker { WorkerReportsProgress = true };
            while (wave.Position != length)
            {
               ...Process..
                worker.ReportProgress((100 * (int)(length / wave.Position)) / (int)(length / mainBuffer.Length));
            }
        }

このメソッドをクラスに記述して計算を実行しBackgroundWorker、パラメータとして使用してProgressbarduring ループを表示しました。ただし、このメソッドを実行するとForm.cs

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = Math.Min(e.ProgressPercentage, 100);
        }

このイベントは機能していないため、ProgressBar値は変更されません。どうすればそれを機能させることができますか?

4

3 に答える 3

0

ここで指定したレポート Progress イベントは backgroundworker1 に対するものであり、関数 CalculateAttributions(...) 内でコーディングしたワーカーに対するものではありません。

レポートの進行状況を有効にし、進行状況バーの変更を行うには..次のコードを試してください

Worker1.ProgressChanged+=new delegate { progressBar1.Value = Math.Min(e.ProgressPercentage, 100); };

同じ機能で。

これがお役に立てば幸いです

于 2013-10-25T08:18:22.033 に答える
0

イベント ハンドラをアタッチする必要があります。このようになるはずです。

public static void CalculateAttributions(BackgroundWorker worker, string _filename, ComboBox cmb, OpenFileDialog open)
        {
            worker = new BackgroundWorker { WorkerReportsProgress = true };
    worker.DoWork +=     new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged +=         new ProgressChangedEventHandler(worker_ProgressChanged);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);

if (worker.IsBusy != true)
    {
        worker.RunWorkerAsync();
    }

}

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

            while (wave.Position != length)
            {
               ...Process..
                worker.ReportProgress((100 * (int)(length / wave.Position)) / (int)(length / mainBuffer.Length));
            }
        }

private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = Math.Min(e.ProgressPercentage, 100);
        }

private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            //done
        }
于 2013-10-25T08:33:58.070 に答える