Hirdetés
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- gban: Ingyen kellene, de tegnapra
- Real Racing 3 - Freemium csoda
- Luck Dragon: Asszociációs játék. :)
- Brogyi: CTEK akkumulátor töltő és másolatai
- Gurulunk, WAZE?!
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- laskr99: DFI és DFI Lanparty gyűjteményem
- Parci: Milyen mosógépet vegyek?
Új hozzászólás Aktív témák
-
joysefke
veterán
válasz
ReSeTer #9827 üzenetére
Bontsuk kétfelé a kérdést. Vagy amit megértettem belőle:
1,
Akarsz valami UI-t csinálni, ami user inputra reagál, csinál valamit és visszajelzést ad.
Nem tudod hogyan kéne a UI-t létrehozni, strukrurálni, úgy hogy aztán később "egy másik metódustból" hozzáférj adott UI elemekhez?
UI-hoz nem szólok hozzá.2,
Van egy fő végrehajtási szálad és nem tudod hogyan kéne egy "jól definiált feladatot" nem a fő szálon végrehatjani hanem onnan a háttérbe delegálni úgy hogy a háttérben az megtörténjen, mellékhatásokat tudjon létrehozni, pld üzenetet tudjon küldeni vagy mondjuk meglegyen a visszatérési értéke?A "jól definiált feladatodat" ki kell szervezned. Legegyszerűbben egy metódusba amire aztán hivatkozni tudsz.
void Something(p1, p2, ..) { .. }
aztán ezt ahelyett hogy a fő szálon meghívnád ezt a Something(..)-et, delegálod a végrehajtását a threadpoolnak. Ezt a Task.Run(..) nal teszed meg és paraméterként átadsz egy delegate-et amelyik hivatkozik a metódusodra.
Tehát a fő szálon ahonnnan delegálsz :
p1 = ...;
p2 = ...;
var t = Task.Run(() => Something(p1, p2, ..))
// fő szál nincsen blokkolva, a 't' visszatérési érték referencia a Task objektumra amibe a delegált feladatod csomagolva lett.Ebben a példában a "Something" egy visszatérési érték nélküli metódus, tehát mellékhatásokkal operál.
Ha azt szeretnéd, hogy egy másik kódrészlet értesítést kapjon a "Something"-ben történtekről, pld hogy az éppen hol tart, akkor ezt a Something-nek átadott paramétereken kerszül tudod legegyszerűbben megtenni. Paraméterként átadsz egy delegate-et amit a "Something" fel tud hívni mintegy üzenve a külvilágnak.
pld átadsz neki egy Progress<T>-t paraméterként ezen keresztül pedig a Something vissza tud jelezni a Progress<T> gazdájának. (A Progress<T> egy Action<T> delegatet csomagol be, UI kompatibilis módon.)
Something(p1, p2, .., IProgress<int> progress)
{
progress.Report(0);Thread.Sleep(1000) // CPU work
progress.Report(50);Thread.Sleep(1000) // CPU work
progress.Report(100);
}
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- ÚJ HP ENVY 17 Nagyképernyős Multimédiás Laptop -45% 17,3" Brutál i7-13700H 16/1TB Iris Xe FHD IPS
- GARIS! Lian Li HydroShift !!!! LCD !!!! 360TL (RGB) - FEKETE
- BOMBA ÁR + GARIS - Lian LI GA II TRINITY 360 SL INF - VENTI MENTES
- BESZÁMÍTÁS! 32GB G.SKILL Trident Z5 RGB 7800MHz DDR5 memória garanciával hibátlan működéssel
- BESZÁMÍTÁS! Intel Core i9 9900K 8 mag 16 szál processzor garanciával hibátlan működéssel
- HIBÁTLAN iPhone 14 Pro 128GB Space Black -1 ÉV GARANCIA -Kártyafüggetlen, MS3590
- 2 db (130 / 131) - Lenovo Legion Pro 7 (16IRX9H) - Intel Core i9-14900HX, RTX 4080
- HIBÁTLAN iPhone 13 128GB Starlight -1 ÉV GARANCIA - Kártyafüggetlen, MS3726
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max
- Eredeti Lenovo USB-C 65W töltő (használtak) (ELKELTEK)
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő