Wątki i metoda na wzór Console.ReadLine()

Odpowiedz Nowy wątek
2011-09-04 15:10
Adam92
0

Mam własną kontrolkę, która przedstawia mapę do gry. Zawiera wiele sześciokątnych pól. Potrzebuję stworzyć w mojej kontrolce metodę: GetMapField(), która poczeka aż użytkownik kliknie myszką na jakieś pole należące do mapy i zwróci obiekt, odpowiadający temu polu. Coś na wzór Console.ReadLine(), bo działa przecież podobnie. Pytanie jak to zrobić w aspekcie wątków. Wywołam GetMapField, tam ustawie sobie zmienne kontrolki: CzekamyNaWybranie = true; WybranyObiekt = null;
I teraz chciałbym czekać, aż zmienna WybranyObiekt zostanie zapełniona przez OnLeftMouseButtonDown. Jak na nią oczekiwać, aby nie zastopować głównego wątku kontrolki, aplikacji i jednocześnie oczekiwać na wybranyObiekt i mieć możliwiść wybrania tego obiektu przez eventy myszki. Proszę o pomoc. Jestem prawie zielony w wątkach.

Pozostało 580 znaków

2011-09-05 10:33
3

Jakiś koszmarny plan uknułeś. Nie tak.
Masz klasę reprezentującą planszę (informacje o polach etc.), następnie masz kontrolkę, która prezentuje mapę. Są to dwie różne sprawy, czyli przechowywanie danych mapy, a jej prezentacja.
Teraz kontrolka pokazująca mapę na OnClick myszki (lub może także jakieś wskazanie za pomocą klawiatury) musi "policzyć" które pole zostało kliknięte. Kontrolka! Klasa składująca dane o mapie nie wie jakiej wielkości są pola prezentowane na ekranie, czy mają 10px czy 50px, czy są prezentowane w 2D, rzucie izometrycznym czy w 3D. To wszystko zadanie GUI. Kontrolka na podstawie miejsca kliknięcia ustala że to pola np. (5,16) i na tej podstawie odpytuje klasę przechowującą mapę o szczegóły tego pola.
Więc żadne blokowanie wątku, żadne ReadLine. Czekasz na akcję użytkownika i dokonujesz reakcji.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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