Witajcie.
Od niedawna programuję w .NET.
Próbuję zaimplementować wątki. Chcę wykonywać w tle dwie kopiue tej samej metody.
Ogólny zarys przedstawia poniższy kod.
Uruchomienie programu powoduje wyjątek, gdyż w metodzie wątku przekazywane intA ma wartość 5.
Nie rozumiem tego.
Główna pętla puszczająca te wątki jest ograniczona intA < 5 (tabElementy.Length).
W niej co prawda wykonuję intA++ jednak kolejny wątek puszczam po uprzednim sprawdzeniu powyższego warunku. Nie dochodzi nigdy do przekazania intA o wartości 5 do wątku, a jednak metoda, która już się wykonuję otrzymuję wartość 5.
Tak jakbym przekazywał tylko referencję do zmiennej do tej metody pracującej w wątku i wtedy jak program główny ją zmieni to również zmieni się tam.
Możecie pomóc mi w zrozumieniu, co robię źle?
[c#]
private Metoda_Thread(int intA, string [] tablica)
{
int wA = intA;
string bufor = "";
bufor = tablica [wA];
}
public Metoda1()
{
Thread [] tabTrd = new Thread [5];
string[] tabElementy = {"1", "2", "3", "4", "5"};
for (intA = 0; intA < tabElementy.Length; intA++)
{
ThreadStart zadanie = delegate {Metoda_Thread(intA, tabElementy); };
tabTrd[0] = new Thread(zadanie);
tabTrd[0].IsBackground = true;
tabTrd[0].Start();
intA++;
if (intA<tabElementy.Length)
{
ThreadStart zadanie = delegate {Metoda_Thread(intA); };
tabTrd[1] = new Thread(zadanie);
tabTrd[1].IsBackground = true;
tabTrd[1].Start();
}
}
}