Téma

Téma: vlákna uživatelského rozhraní / periodické zpracování

Tematická stránka, která na jednom místě spojuje WPF / WinForms, vlákno uživatelského rozhraní, async/await, Dispatcher a volbu vhodného časovače.

Proč se v tomto tématu často narazí na potíže

Jakmile se ve WPF / WinForms smísí asynchronní kód, aktualizace uživatelského rozhraní a periodické úlohy, přestane být vidět, které vlákno co provádí. Toto téma je místem, kde lze zamrzání uživatelského rozhraní, aktualizace z jiného vlákna a rozpaky při volbě časovače sledovat jako jeden celek.

  • Po await není snadné poznat, kam se provádění vrátí
  • Úlohy, které mají běžet v uživatelském rozhraní, se mísí s úlohami, které patří do pozadí
  • Odpovědnosti tříd DispatcherTimer, System.Threading.Timer a PeriodicTimer jsou nejasné
  • Není vidět, jak by měla vypadat snadno udržovatelná podoba aplikace ve WinForms / WPF

Otázky, které se při konzultacích často objevují

  • Zůstávají zde .Result / .Wait(), takže se obrazovka snadno zastaví
  • Hranice mezi Task.Run a aktualizací uživatelského rozhraní je nejasná
  • Implementace periodického spouštění je rozptýlená a vzniká posun časování (drift) i opakované souběžné spuštění
  • Chceme omezit závislost na vlákně uživatelského rozhraní, aniž bychom narušili odpovědnosti obrazovky

Vhodný postup

V této oblasti se v praxi lépe osvědčuje, když vlákno uživatelského rozhraní a periodické úlohy ujasníte společně, než kdybyste se zvlášť zabývali jen async / await a zvlášť jen časovači. Když se skupina souvisejících článků projde společně se stránkami služeb, je snazší rozhodnout, zda začít od návrhových rozhodnutí, nebo od oprav implementace.

Poraďte se s námi

Pokud tato stránka odpovídá situaci, kterou řešíte, poraďte se s námi a připojte současný kontext i to, jakou podporu potřebujete.

Zpět na úvodní stránku