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.Timer i PeriodicTimer jest 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.Run a 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.

Powrót do strony głównej