- Samsung Galaxy S25 - végre van kicsi!
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Poco M8 Pro 5G gyorsteszt
- Milyen okostelefont vegyek?
- Samsung Galaxy A54 - türelemjáték
- Tecno Spark 20 Pro újra, immáron 5G-vel
- iPhone topik
- Google Pixel topik
- Vedd szemügyre a Poco X8-akat!
- Érkezik a Huawei Band 11 és 11 Pro, mindent tudni az új karkötőkről
Ú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!
- Sweet.tv - internetes TV
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Kormányok / autós szimulátorok topikja
- Mibe tegyem a megtakarításaimat?
- Projektor topic
- LG LCD és LED TV-k
- Elektromos autók - motorok
- Háztartási gépek
- Formula-1
- Mesterséges intelligencia topik
- További aktív témák...
- Beszámítás! Lenovo Legion 5 15ACG6 165Hz Gamer notebook -R7 5800H 32GB DDR4 1TB SSD RTX 3070 8GB W11
- Honor Pad 8 / 6/128GB / Wi-fi / 12Hó Garancia
- BESZÁMÍTÁS! Asus TUF F15 FX506HE FHD notebook - i5 11400H 16GB DDR4 512GB SSD RTX 3050 Ti 4GB WIN11
- Gamer PC-Számítógép! Csere-Beszámítás! R7 5700 / RTX 2080Ti 11GB / 16GB DDR4 / 1TB Nvme SSD
- DELL Optiplex 3060 SFF - i5-8500 / 8GB / 256GB SSD / DVD / Win11
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest


