Aplikacje klienckie- przesyłanie danych między wątkami

1

Jak rozwiązać problem przesyłania informacji między wątkami? Np mam wątek główny i wątek drugi, w którym chciałbym wykonywać wszystkie operacje sieciowe (żeby się interfejs nie zacinał). I teraz użytkownik klika w button połączenia- startuje wątek drugi, gdzie na początku łączę się z serwerem. Później klika w inny button, po czym muszę coś wysłać do serwera. Jak o tym drugim naciśnięciu poinformować drugi wątek?

0

Do głowy przychodzą mi 2 pomysły:

  1. Prostszy: zmienna boolowska
bool button1clicked = false;

W zdarzeniu kliknięcia przycisku

button1clicked = true;

Wątek obsługiwany byłby przez odpowiednią pętlę:

while(true){
  if(button1clicked) FunkcjaObslugiKliknieciaButton1();
  if(...) ...; //i inne zdarzenia tak samo
  ...
  System.Threading.Thread.Sleep(100); //nie przemęczać procesora
}
  1. Trudniejszy: Kolejka poleceń
class Polecenie {} //a w niej potrzebne informacje

public Queue<Polecenie> polecenia = new Queue<Polecenie>();

W zdarzeniu kliknięcia przycisku

polecenia.Enqueue(new Polecenie(...)); //w konstruktorze można podać szczegóły polecenia

Wątek obsługiwany byłby przez odpowiednią pętlę:

while(true){
  if(polecenia.Count!=0) polecenia.Dequeue().Run(); //wywołać funkcję Run() klasy polecenie dla danego zadania
  System.Threading.Thread.Sleep(100); //nie przemęczać procesora
}

Metoda 2 wymagała by dodatkowej synchronizacji kolejki, ale jest bardzo uniwersalna i daje duże możliwości

0

Zrobiłem sposobem podobnym do pierwszego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1