Vra

Events is sinchrone in C #. Ek het hierdie aansoek waar my hoof vorm begin 'n draad met 'n lus in dit wat luister na 'n stroom. Wanneer iets kom saam op die stroom 'n gebeurtenis is afgevuur uit die lus om die belangrikste vorm.

As die hoof vorm is stadig of toon 'n messagebox of iets die lus sal opgeskort word. Wat is die beste manier om hierdie? Deur die gebruik van 'n terugbel en roep op die belangrikste vorm?

Was dit nuttig?

Oplossing

Hmmm, ek gebruik verskillende scenario's wat afhanklik is van wat ek nodig het op die oomblik.

Ek glo die BeginInvoke sou waarskynlik die maklikste wees om te kodeer omdat jy amper daar is. Hoe dit ook al jy moet reeds gebruik te roep, sodat net die verandering van tot BeginInvoke. Met behulp van 'n terugbel op 'n aparte draad sal dieselfde ding te bewerkstellig (so lank as wat jy die threadpool gebruik om tou op die terugbel) as die gebruik van BeginInvoke.

Ander wenke

Sedert jy 'n vorm, hoe makliker manier is om die Background komponent.

  

Die Background klas kan jy   om 'n operasie uit te voer op 'n aparte,   toegewyde draad. Tydrowend   bedrywighede soos afgelaai en databasis   transaksies kan jou gebruiker veroorsaak   (UI) te lyk asof dit   gestop reageer terwyl hulle   hardloop. As jy wil 'n responsiewe UI   en jy gekonfronteer word met 'n lang vertragings   wat verband hou met sulke operasies, die   Background klas bied 'n   gerieflike oplossing.

Events is net afgevaardigdes , so gebruik BeginInvoke. (Sien maak Asynchronous Metode Oproepe in die NET omgewing )

Jy het 'n paar opsies, soos reeds gedetailleerde, maar in my ervaring, is jy beter af laat afgevaardigdes en BeginInvoke, en die gebruik van Background plaas (v2.0 +), want dit is makliker om te gebruik en ook kan jy interaksie met die belangrikste vorm na afloop van die draad se. Alles in ag genome 'n baie Weel geïmplementeer oplossing, het ek gevind.

System.ComponentModel.BackgroundWorker is inderdaad 'n goeie beginpunt. Dit sal jou asynchrone werk te doen, gee jy kennisgewings van belangrike gebeure, en het maniere om beter te integreer met jou vorms.

Byvoorbeeld, jy kan vordering kennisgewings aktiveer deur die registrasie van 'hanteerder vir die ProgressChanged gebeurtenis. (Wat hoogs aanbeveel as jy 'n lang, asynchrone proses en jy wil nie jou gebruiker om die aansoek vries dink)

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top