• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

lock(Datatble) c# nie blokuje wykonania kodu

0 głosów
25 wizyt
pytanie zadane 21 sierpnia w C# i .NET przez Rafał Ciołek Nowicjusz (180 p.)

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");

            }

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 78 wizyt
pytanie zadane 11 listopada 2018 w C# i .NET przez Ditrix Mądrala (5,440 p.)
0 głosów
1 odpowiedź 97 wizyt
pytanie zadane 27 lipca 2017 w C# i .NET przez SzczerbekGame Bywalec (2,780 p.)
0 głosów
1 odpowiedź 36 wizyt
pytanie zadane 25 sierpnia w C# i .NET przez Fikter Nowicjusz (120 p.)
Porady nie od parady
Forum posiada swój własny serwer Discord, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

66,494 zapytań

113,266 odpowiedzi

239,865 komentarzy

46,631 pasjonatów

Przeglądających: 119
Pasjonatów: 3 Gości: 116

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...