Backgroundworker i ProgressBar

0

Witam,
wykorzystałem przykład z : http://msdn.microsoft.com/en-us/library/vstudio/b2zk6580(v=vs.100).aspx.
Jednak w tym miejscu w kodzie:

  int percentComplete = (int)((float)n / (float)numberToCompute * 100);
            Console.WriteLine(percentComplete);
            if (percentComplete > highestPercentageReached)
            {
                highestPercentageReached = percentComplete;
                worker.ReportProgress(percentComplete);
            }
 

wyskakuje wyjątek: :Brak postępu procesu BackgroundWorker. Zmodyfikuj stan WorkerReportsProgress, tak aby postęp był widoczny"
Czy może mi ktoś powiedzieć co jest nie tak?
Cały kod:

 
private int numberToCompute = 0;
        private int highestPercentageReached = 0;
        public Form1()
        {
            InitializeComponent();
        }
        long Fibonacci(int n, BackgroundWorker worker, DoWorkEventArgs e)
        {
            long wynik = 0;


            if (n < 2)
            {
                wynik = n;
            }
            else
            {
                wynik = Fibonacci(n - 1, worker, e) + Fibonacci(n - 2, worker, e);
            }

            int percentComplete = (int)((float)n / (float)numberToCompute * 100);
            Console.WriteLine(percentComplete);
            if (percentComplete > highestPercentageReached)
            {
                highestPercentageReached = percentComplete;
                worker.ReportProgress(percentComplete);
            }

            return wynik;
        }
        private void Oblicz_Click(object sender, EventArgs e)
        {
            wynik.Text = String.Empty;
            numberToCompute = Convert.ToInt32(textBox1.Text);
            backgroundWorker1.RunWorkerAsync(numberToCompute);
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            e.Result = Fibonacci((int)e.Argument, worker, e);
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {

            wynik.Text = e.Result.ToString();
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.progressBar1.Value = e.ProgressPercentage;

        }
1

Najlepiej przeczytać jeszcze raz komunikat z błędem, a potem w _DoWork dodać linijkę:

worker.WorkerReportsProgress = true;
2

I odinstaluj polski pakiet językowy dla .NET.

1 użytkowników online, w tym zalogowanych: 0, gości: 1