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
awaitnení 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.TimeraPeriodicTimerjsou 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.Runa 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.