Witam,
mam problem z poprawnym zakodowaniem tego co chce osiągnąć. Chcę przekopiować datarows z jednego obiektu datatable do drugiego obiektu również klasy datatable.Funkcja jest wywoływana przez combobox.TextChanged. ogólny zamysł funckji wygląda tak:
usuń zawartość datatable widzialne_klasy funkcją widzialne_klasy.Clear();
pobierz combobox.Text,
jeżeli obiekt combobox zawiera Item którego zawartość jest równa combobox zaktualizuj datatable widzialne_klasy,
Jednak problem polega na tym że lock nie blokuje, to znaczy gdy najpierw jeden wątek wejdzie w strefie lock(widzialne_klasy){ } to nie blokuje kolejnego wywołania funkcji(kolejne wywołania funkcji zaczyna wykonywać część kodu wewnątrz locka pomimo iż poprzednie wywołanie funkcji nie zakończyło pracy w tej sekcji)
dobrze to widać gdy uruchomi się program wstawi w odpowiednia miejsce MessageBox. które aktualnie dezaktywowałem
jeśli uruchomi się program i usunie znaki // przy //MessageBox.Show("aaa"); i//MessageBox.Show("bbb");
to kolejne wiadomości wyświetlane przez MessageBox są takie
(pierwszy MessageBox) aaa
(drugi MessageBox) aaa
(trzeci MessageBox) bbb
(czwarty MessageBox) bbb
a powinno być tak:
(pierwszy MessageBox) aaa
(drugi MessageBox) bbb
(trzeci MessageBox) aaa
(czwarty MessageBox) bbb
wie ktoś jak to rozwiązać
lock (widzialne_klasy)
{
//MessageBox.Show("aaa");
System.Windows.Forms.ComboBox combox = (System.Windows.Forms.ComboBox)sender;
string text = (combox.Text.ToLower()).Replace(" ", "");
DataTable dane = widzialne_klasy;
widzialne_klasy.Clear();
foreach (DataRow row in _klasy.Rows)
{
if (row.ItemArray[1].ToString().ToLower().Replace(" ", "") == text)widzialne_klasy.Rows.Add(row.ItemArray);
}
//MessageBox.Show("bbb");
}