Witam,
próbuję robić proste losowanie liczby korzystając z BackgroundWorker, jednak dzieją się dziwne rzeczy, a rozwiązania dojść nie mogę.
Dla testów, losuje 10 liczb z przedziału -1000 do 1000. Wygląd mojego kodu:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
ilosc_liczb = Convert.ToInt32(textBox2.Text);
tablica = new int [ilosc_liczb];
przedzialOd = Convert.ToInt32(numericUpDown1.Value);
przedzialDo = Convert.ToInt32(numericUpDown2.Value);
Random random = new Random();
double ilosc_liczb_double = Convert.ToDouble(ilosc_liczb);
ile = 100 / ilosc_liczb_double;
for (i = 0; i < ilosc_liczb; i++)
{
if (worker.CancellationPending == true)
{
e.Cancel = true;
break;
}
else
{
liczba = random.Next(przedzialOd, przedzialDo);
tablica[i] = liczba;
liczba_w_string = liczba.ToString();
procent = procent + ile;
System.Threading.Thread.Sleep(5);
worker.ReportProgress(Convert.ToInt32(procent));
}
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
textBox1.AppendText("Liczba nr " + i + ": " + liczba_w_string + "\n");
}
Zmienna "i" sterująca pętlą odpowiada za wpis do tablicy na pozycji i 0-9 (więc 10 liczb) oraz wypisywanie liczb. Teoretycznie, powinno wypisywać zawsze od Liczba nr 0: do Liczba nr 9:
Jak zauważycie na screenach poniżej, jest inaczej. Dlaczego?
Podczas debugowania każdej iteracji wyniki zawsze zwracane są dobre, inaczej sprawa się ma gdy puszcze aplikację bez opcji debugowania, wtedy wypisuje od 1 do 10 (zamiast 0 do 9) oraz niekiedy powiela niektóre iteracje pomijając inne. Co może być tego przyczyną?
Załączam screeny pomocnicze:
Jak widać dla przypadków gdy robiłem debugging wyniki wyświetliły się dobrze, beż żadnych powtórzeń czy liczb nr. 10, których imo być nie powinno, skoro for przechodzi od 0 do 9.