Kezdőoldal » Számítástechnika » Programozás » C#-ban hogyan oldható meg,...

C#-ban hogyan oldható meg, hogy várjon a függvény, amíg a lista nem üres?

Figyelt kérdés

Hogyan oldható meg C#-ban, hogy egy függvény megvárja, míg a foreach kiüríti a listát?

Például egy gombnyomás eseményre meghívja a függvényt, de mivel számításigényes/sokáig tart a művelet, ezért mire a listát kiürítené, már jöhet egy második gombnyomás.

Szinte biztos vagyok benne, hogy szálkezeléssel, vagy aszinkronos függvényhívással kellene megoldani, de nem teljesen tiszta a dolog.


List<string> lista = new List<string>();

public void Fgv()

{

foreach (...)

{

...

}

}


2019. okt. 13. 13:01
 1/10 anonim ***** válasza:

foreach eleve nem ürítheti a listát.

Mindenesetre thread safety, semafore, locking, ezek a kulcsszavaid.

2019. okt. 13. 13:19
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:

nem elég neked egy sima if?

if(lista.Count > 0) {


}

2019. okt. 14. 05:35
Hasznos számodra ez a válasz?
 3/10 anonim ***** válasza:
#2: Nem.
2019. okt. 14. 06:27
Hasznos számodra ez a válasz?
 4/10 anonim ***** válasza:

#3:

ha 1 gombról van szó ami mindig ugyanazt a függvényt hívja meg, ami üríti a listát, akkor igen

2019. okt. 14. 08:09
Hasznos számodra ez a válasz?
 5/10 anonim ***** válasza:
#4: De nem. Konkurrencia problémák léphetnek fel, ha nincs lockolás, amíg dolgozik a függvény.
2019. okt. 14. 12:58
Hasznos számodra ez a válasz?
 6/10 anonim ***** válasza:

#5:

kivéve, ha simán ellenőrzi egy feltétellel, hogy ha a lista üres másodjára már nem fut bele az ürítésbe, az ürítési folyamat csak 1x indul el


én csináltam már hasonlót lock nélkül és egy sima IF-el megoldottam ezt, hogy csak egyszer indulhatott el, persze ott még a lista counton kívül volt 1 bool is ami figyelte, hogy indul e

2019. okt. 14. 14:09
Hasznos számodra ez a válasz?
 7/10 anonim ***** válasza:
52%
Hallod, ne akard már megmagyarázni, ha fingod nincs a thread-safety-ről.
2019. okt. 14. 16:41
Hasznos számodra ez a válasz?
 8/10 anonim ***** válasza:

nem is kell multi-thread itt

neked meg arról sincs fingod mikor kell új szálat indítani :D

2019. okt. 14. 17:17
Hasznos számodra ez a válasz?
 9/10 anonim ***** válasza:
100%

Minden egyes gui gomb nyomáskor egy új thread indul az eventhandlerben. Ha kétszer nyom a gombra simán előfordulhat, hogy az első handler még nem végzett, mikor a második elindul. Ha nincs locking elkezdhetnek egyszerre dolgozni ugyanazon a listán, jön is majd az exception.


Neked meg több tanulást, kevesebb arcot. Mindkettő jót fog tenni.

2019. okt. 14. 18:11
Hasznos számodra ez a válasz?
 10/10 A kérdező kommentje:

#1: A foreach nem az ürítendő lista elemein megy végig. Köszi a kulcsszavakat


Az if-es példát megértettem köszönöm, viszont nekem mindenképpen meg kell hívni majd a ciklust, amint üres lesz a lista (feltéve, hogy jött ugye az esemény/gombnyomás).

Esetleg tudtok mutatni egy példát a szálkezeléses megoldásra is?

2019. nov. 3. 11:07

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!