wytrzzeszcz
#naukaprogramowania #programowanie #csharp

Mam aplikację jak na rysunku.

Są sobie okna które mają referencję na maszynę stanów, która normalnie jest dostępna z "Kontrolera okien".
Okna mogą przekazywać dane do maszyny stanów, by ta mogła decymować co jest do zrobienia dalej.

I teraz jest pytanie jak z okna wywołać wątek działający wewnątrz tej maszyny stanów, który coś policzy i na podstawie wyniku zmienić treść wyświetlanego okna następnego chwile po jego wyświetleniu?

Konkretne zadanie, chce po kliknięciu guzika, ściągnąć dane z serwera, wtedy użytkownik może kliknąć "dalej" aby przejść do następnego okna, i tam powinny już czekać przetworzone dane. nie będzie to trwało długo bo danych jest malutko, nie mniej lepiej jest chyba nie wstrzymywać wykonania programa na ten czas.
  • Najlepsze
  • Wszystkie komentarze
erwit
erwit
1
@wytrzzeszcz: super diagram
b.....a
b.....a
@wytrzzeszcz: podepnij jakis binding pod Okno1, ktory bedzie notyfikowal maszyne stanow, ze cos sie o------o. W handlerze w maszynie uruchom Okno2 przekazujac mu dane przeslane (tez moze byc binding) z Okno1. Jak nie umiesz into binding to uzyj prostych eventow
qubeq
qubeq
1
@wytrzzeszcz: Możesz uruchomić proces, a potem pobrać wynik z obiektu Task. Jeśli to jest WPF(MVVM) to w ogóle bajka bo tam możesz bindować właściwości do kontrolek.

Ale w Windows Forms też można uzyskać aktualizowanie UI z wątków roboczych bez blokowania.
qubeq
qubeq
1
@wytrzzeszcz: No i tak ma być.

Maszyna implementuje INotifyPropertyChanged i nie musi wiedzieć kto z niej korzysta. Poczytaj o MVVM.
wytrzzeszcz
wytrzzeszcz Autor
0
@erwit: ( ͡° ʖ̯ ͡°) ale z opisem czytelny?
qubeq
qubeq
0
wytrzzeszcz
wytrzzeszcz Autor
0
@bacteria: @qubeq:
czyli jak
b.....a
b.....a
@qubeq: @bacteria: w winformsach tez jest binding. Mozesz tez uzyc albo async/await albo Task.Run() (ustaw sobie ConfigureAwait)
qubeq
qubeq
0
@wytrzzeszcz: No mniej więcej tak jak to opisałeś.

Okno1.Kontrolka.klikniete()
{
// tutaj odpalasz wątek, czy event ktory uruchomi kod do pobierania
qubeq
qubeq
0
@wytrzzeszcz: Od siebie polecam używanie Tasków bo masz kontrolę nad tym co się dzieje i takie rzeczy jak .ContinueWith, czyli określasz co się będzie działo zaraz po zakończeniu pracy taska. No i to co pisze @bacteria: też.
Poczytaj sobie dokumentację bo jest bardzo dobra.
(wcześniej dałem stary link)
https://docs.microsoft.com/en-gb/dotnet/api/system.threading.tasks.task?view=netframework-4.7.1
wytrzzeszcz
wytrzzeszcz Autor
0
INotifyPropertyChanged jest w maszynie i musi widzieć okno by mu coś powiedzieć? problem jest o tyle że okno widzi maszyne a maszyna nie widzi okna.
@qubeq:
wytrzzeszcz
wytrzzeszcz Autor
0
@qubeq: ok, dziekuje