problem z wątkami

0

pisze program, w którym trzeba wskazać (kliknąć myszą) na jeden z 5 narysowanych kwadratów
w metodzie onPaint formatki mam petle

while(true){
 //kod, ktory rysuje kwadraty
}

poza tym mam zaimplementowana akcje MouseClick, która sprawdza na podstawie współrzędnych kliknięcia, który kwadrat został wybrany.
jak wyrzucę wspomnianą wyżej pętlę while wszystko działa, ale wykona się tylko raz, a chcę żeby wykonywało się wiele razy.
tutaj pojawia się mój problem - podczas pętli obsługa myszy nie działa, próbowałem rozwiązać to wątkami, ale nie udało mi się tego poprawnie napisać.
ma ktoś jakies propozycje?

0

a powiedz nam dlaczego w OnPaint masz pętlę nieskończoną jak rysujesz tylko 5 kwadratów??

0

program działa na zasadzie, ze rysuje duzy kwadrat o losowym kolorze. nastepne rysuje 5 kwadratow, z ktorych tylko jeden ma taki sam kolor. po wyborze jedego z nich (niezaleznie czy wybor jest dobry czy nie) całośc powtarza sie na nowo - rysuje duzy (rozmiaru formatki) kwadrat losowego koloru, pozniej odmalowanie formatki na bialo i 5 kwadratow itd.

probowalem wyrzucic rysowanie do osobnej funkcji i zrobic cos takiego:

Thread t = new Thread (rysuj_kwadraty);         
 t.Start();

tutaj kolejne pytanie - czemu nie moge wywolac metody z parametrem np. new Thread(rysuj_kwadraty(g)), gdzie
w metodzie onPaint Graphics g = e.Graphics; e - paramter metody OnPaint

0

a jaki związek ma to z moim pytaniem???
OnPaint wywoływane jest tam wtedy, kiedy formatka wymaga przerysowania. W skrajnych przypadkach może to być kilka(naście/dziesiąt) razy na sekundę. Nie za bardzo rozumiesz jak to działa i tworzysz potworki. W OnPaint powinno być przerysowanie z bufora na płótno. I tylko tyle. Natomiast bufor powinieneś namalować na starcie i po każdym kliknięciu. Bez żadnych pętli nieskończonych czy innych dziwnych rzeczy. Buforem może być np. bitmapa trzymana w pamięci

0

ma zwiazek:) ale Twoja uwaga była pomocna mimo wszystko, zamiast petli zostawilem tylko polecenia, ktore były w jej wnetrzu i wrzucilem na koniec obslugi klikniecia Refresh(); Teraz wszystko śmiga tak jak powinno. Może mało profesjonalne rozwiązanie, ale w tym wypadku wystarczające

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