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;
}