Kezdőoldal » Számítástechnika » Programozás » C# szálkezeléssel hogyan...

C# szálkezeléssel hogyan oldható meg, hogy a meghívó függvény megvárja a hívandót?

Figyelt kérdés

Például:

public void ListBoxFeltolt(){...}

Majd ezt a másik (hívó) függvényben szeretném használni, valahogy így:

ListBoxFeltolt(...)...


Ha kiíratom az adott listbox elemeinek számát a hívó függvényben, akkor azt írja, hogy üres a lista. Én azt szeretném elérni, hogy várja meg a feltöltést. Próbáltam aszinkronná tenni a függvényeket, sajnos nem sikerült. Utána megpróbálkoztam a Delegate.BeginInvoke-kkal, de sajnos az elemek száma továbbra is 0.

Azt szeretném megtudni, hogy ez hogyan oldható meg? Esetleg erre/hasonló esetre tudna valaki mutatni egy példát?


2019. dec. 23. 13:02
1 2
 1/11 anonim ***** válasza:
16%

prog.hu


itt sokkal előbb kapsz értelmes választ

2019. dec. 23. 13:03
Hasznos számodra ez a válasz?
 2/11 anonim ***** válasza:
100%
De mi értelme az aszinkronitásnak, ha úgyis megvárod a végrehajtást?
2019. dec. 23. 13:11
Hasznos számodra ez a válasz?
 3/11 A kérdező kommentje:

Köszi a tippeket!

#2 erre én is gondoltam. Először azért akartam így megvalósítani, mert a ListBox feltölt függvény is hív meg olyan metódusokat, melyeket csak aszinkron hívással hívhattam meg. Megpróbáltam minden aszinkron hívást kitörölni, hogy teljesen szinkron legyen, de sajnos így is 0-át mutat.

Egyébként, ha előtte MessageBox.Show-t hívok, akkor azt követően normálisan mutatja az elemszámait. Gondolom, hogy Sleep-el is menne, de valami biztos és jobb megoldást szeretnék.

2019. dec. 23. 15:02
 4/11 anonim válasza:
100%

Az event handler (hívó) is lehet asyinc. Pl. gombnyomás


private async void button1_Click(object sender, EventArgs e)

{

await ListBoxFeltolt();

}

2019. dec. 23. 15:11
Hasznos számodra ez a válasz?
 5/11 anonim válasza:
100%
Illetve használhatsz BackgroundWorker -t is.
2019. dec. 23. 15:12
Hasznos számodra ez a válasz?
 6/11 A kérdező kommentje:

Így próbáltam már: await Task.Run(() => fv());

Sajnos így sem ment.

2019. dec. 23. 15:24
 7/11 A kérdező kommentje:

Végül nem túl szépen, de megoldottam. Leírom azért ezt a megoldást is, hátha segít valakinek:

Meghívtam az előbb említett módon. Majd ezt követően létrehoztam egy függvényt a listbox elemeinek kiírására. Ez a függvény ilyesmi:

listbox.Dispatcher.Invoke(() => { ... });

A hívó függvényben ezt is aszinkronosan meghívtam.

2019. dec. 23. 15:49
 8/11 A kérdező kommentje:
És minden segítséget köszönök!
2019. dec. 23. 15:50
 9/11 A kérdező kommentje:
Ha valakinek van valami ötlete, azt elfogadom, ugyanis ez a megoldás sem működik minden esetben...
2019. dec. 23. 15:52
 10/11 anonim ***** válasza:
És mi van ha az első függvény még nem végez, mikor meghívtad a másodikat?
2019. dec. 23. 18:43
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!