Wpis z mikrobloga

#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.
Pobierz wytrzzeszcz - #naukaprogramowania #programowanie #csharp

Mam aplikację jak na rysu...
źródło: comment_OQh5Qt7bczvb585Q5QfQvkHKcMPwhP86.jpg
  • 12
@wytrzzeszcz: podepnij jakis binding pod Okno1, ktory bedzie notyfikowal maszyne stanow, ze cos sie #!$%@?. 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
@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.
@bacteria: @qubeq:
czyli jak
Okno1.Kontrolka.klikniete()
{
maszyna-stanów.cos-sie-dzieje()
}

maszyna-stanów.cos-sie-dzieje()
{
sciagnij-i-zrob.run()?
}

zrob-cos()
{
robi rzeczy
wynik=wynik-z-rzeczy;
}

Maszyna-stanow.dajwynik()=>wynik;

okno2.Load()
{
Maszyna-stanow.daj
wynik()?
}
@wytrzzeszcz: No mniej więcej tak jak to opisałeś.

Okno1.Kontrolka.klikniete()
{
// tutaj odpalasz wątek, czy event ktory uruchomi kod do pobierania danych
maszyna-stanów.cos-sie-dzieje()
}

maszyna-stanów.cos-sie-dzieje()
{
sciagnij-i-zrob.run()?
}

zrob-cos()
{
robi rzeczy
wynik=wynik-z-rzeczy;
}

Maszyna-stanow.dajwynik()=>wynik;
// tutaj event/task konczy działanie. i masz dane w propercie wynik, ale nie wiadomo,
// czy uzytkownik już wcisnął 'dalej' czy dopiero to zrobi.

okno2.Load()
{
// w tym momencie powinieneś mieć dostęp do tych