Temat
Wątki interfejsu użytkownika i przetwarzanie okresowe – temat
Strona tematyczna, na której można prześledzić razem: WPF / WinForms, wątki interfejsu użytkownika, async/await, użycie Dispatchera i wybór timerów.
Dlaczego w tym temacie łatwo utknąć
W WPF / WinForms, gdy tylko pomieszają się praca asynchroniczna, aktualizacje interfejsu i przetwarzanie cykliczne, trudno zorientować się, co działa w którym wątku. Ten temat jest punktem wyjścia, w którym zawieszanie się interfejsu, aktualizacje międzywątkowe i wątpliwości przy wyborze timera można prześledzić jako jedną całość.
- trudno ocenić, gdzie wraca wykonanie po
await - praca, która powinna działać w interfejsie, miesza się z pracą przeniesioną do tła
- odpowiedzialność
DispatcherTimer,System.Threading.TimeriPeriodicTimerjest niejasna - trudno dostrzec postać kodu WinForms / WPF, którą łatwo utrzymywać
Zagadnienia często pojawiające się w konsultacjach
- pozostały
.Result/.Wait(), przez co interfejs łatwo się blokuje - granica między
Task.Runa aktualizacją interfejsu jest niejasna - implementacje wykonywania cyklicznego są rozproszone, co powoduje dryf czasowy (drift) lub nakładające się wykonania
- chcemy ograniczyć zależność od wątku interfejsu, nie naruszając odpowiedzialności ekranu
Zalecany sposób postępowania
W praktyce lepiej sprawdza się łączne uporządkowanie wątku interfejsu użytkownika i przetwarzania cyklicznego niż osobne rozpatrywanie samego async / await czy samych timerów.
Wspólne przejrzenie powiązanych artykułów i stron usług ułatwia ustalenie, czy zacząć od decyzji projektowych, czy od poprawek w implementacji.
Zapraszamy do konsultacji
Jeśli mają Państwo problem zbliżony do treści tej strony, prosimy o konsultację z nami, przekazując obecny kontekst oraz rodzaj potrzebnego wsparcia.