Autor Wątek: Wielowątkowość. Odrysowywanie Form.  (Przeczytany 939 razy)

Offline Adam B

  • Użytkownik

# Wrzesień 25, 2010, 09:15:02
hej,

Mam problem z odrysowywaniem formy. Postanowiłem rozwiązać to na zasadzie wątku sprawdzającego czy elementy trzeba odrysować. Posiadam zmienne logiczne, które są ustawiane na true jeśli mamy odrysować jakiś z Paneli. Wątek odrysowujący sprawdza czy zmienna jest na true, a jeżeli tak to włącza odpowiednią funkcję odrysowującą.


static bool Panel1Refresh = false;
static bool Panel2Refresh = false;
static bool Panel3Refresh = false;

//...

Run()
{
  while(true)
  {
  if (Panel1Refresh)
  {
    fPanel1Refresh(DanePotrzebneDoOdrysowania);
    Panel1Refresh=false;
  }
  //... itd
  }
}

//...

private void fPanel1Refresh(Dane d)
{
  //Odmalowanie
}



Klasa Graficzna reprezentująca wygląd

//... Klasa reprezentująca wygląd i w niej funkcja click
private void ElementAbApperance_Click(object sender, EventArgs e)
{
  Dane.setActive(2);  //Ustawia aktywny element z listy
  GLOWNA_FORMA.Panel1Refresh = true;
}


Nie wiem czy jest potrzeba robienia tego na innym wątku. Łatwiej IMHO było by wstawić kod "Runa" do jakiegoś eventa, który jest wywoływany zawsze lub coś w tym stylu (nie wiem jaki event jest zawsze wywoływany). Ominął bym tym samym pisanie zabezpieczeń dla Wielowątkowości, których nie chce robić.

Jeżeli wstawię kod funkcji "Run" do zdarzenia np. MouseEntry dla jakiegoś panelu - to po wjechaniu na niego wszystko działa ok i nie muszę nic dopisywać - dlatego chciałbym domyślnie zrobić to na podobnej zasadzie ale nie mam pomysłu niestety.

Pozdrawiam,
Adam

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Dab

  • Redaktor
    • blog

# Wrzesień 25, 2010, 12:25:05
Nie mam pojęcia co dokładnie chcesz osiągnąć, ale z tego co widzę to możesz po prostu użyć Timera.

Offline Adam B

  • Użytkownik

# Wrzesień 25, 2010, 16:35:39
Tak dokładnie Timer wystarczył do tego rozwiązania. Dzięki za pomysł :)

Pozdrawiam,
Adam