C# szálkezeléssel hogyan oldható meg, hogy a meghívó függvény megvárja a hívandót?
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?
prog.hu
itt sokkal előbb kapsz értelmes választ
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.
Az event handler (hívó) is lehet asyinc. Pl. gombnyomás
private async void button1_Click(object sender, EventArgs e)
{
await ListBoxFeltolt();
}
Így próbáltam már: await Task.Run(() => fv());
Sajnos így sem ment.
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!