Ämne

Ämnet UI-trådar / periodisk bearbetning

Ämnessida där du samlat kan följa WPF / WinForms, UI-trådar, async/await, Dispatcher och vilken timer som ska användas när.

Därför fastnar man lätt i det här ämnet

I WPF / WinForms blir det snabbt svårt att se vad som körs på vilken tråd så fort asynkron kod, uppdateringar av användargränssnittet och periodiskt arbete blandas. Det här ämnet är en samlingspunkt där frysningar, uppdateringar över trådgränser och osäkerhet om vilken timer man ska välja kan följas som en enda helhet.

  • det är oklart var exekveringen återvänder efter await
  • arbete som ska köras i användargränssnittet blandas med arbete som borde ligga i bakgrunden
  • ansvaret för DispatcherTimer, System.Threading.Timer och PeriodicTimer är suddigt
  • det är svårt att se vilken form på WinForms- och WPF-koden som är lätt att underhålla

Frågor som ofta dyker upp i rådgivning

  • .Result / .Wait() finns kvar, och därför fryser skärmen lätt
  • gränsen mellan Task.Run och uppdateringar av användargränssnittet är oklar
  • periodisk körning är utspridd och ger glidning (drift) och överlappande körningar
  • man vill minska beroendet av UI-tråden utan att rubba ansvarsfördelningen i skärmarna

Ett arbetssätt som brukar fungera

På det här området fungerar det bättre i praktiken att ordna UI-tråden och periodiskt arbete tillsammans än att se på async / await för sig och timers för sig. Om du ser de relaterade artiklarna och tjänstesidorna tillsammans blir det lättare att avgöra om du ska börja med designbeslut eller med kodändringar.

Rådfråga oss här

Om den här sidan liknar den situation du står inför kan du rådfråga oss och beskriva nuläget och vilken typ av stöd du behöver.

Tillbaka till startsidan