Avatar billede nidyahou Praktikant
14. januar 2010 - 23:23 Der er 14 kommentarer og
1 løsning

Winform gui halter indtil for-each løkke er kørt igennem

jeg går ud fra at det er et standard problem, men jeg har ikke lige været i stand til at løse det helt selv.

jeg har en progressbar i en winform. Mit problem er, at jeg en progressbar som egentlig skal vise udviklingen, men det bliver ikke rigtigt til noget fordi hele programmet "låser" indtil min for-each løkke er kørt igennem. Det er lidt nederen. Skal jeg ud i noget threading eller kan en timer klare det? Jeg har også en label der burde opdateres på forskellige tidspunkter. I for-each løkken indgår ellers funktioner til at incremente progressbar'en og at skifte text på label'en, men da gui'et låser helt indtil processen alligevel færdig har brugeren ikke meget ud af det.

tak for hjælp eksperter :)
Avatar billede lasserasch Juniormester
15. januar 2010 - 00:04 #1
Det er helt korrekt fordi du udfører dit job på samme tråd som process baren opdateres på.

Det er ikke det helt store problem og du behøves ikke skulle ud i hardcore tråd programmering.

Du kan bruge en background worker. Den er perfekt til formålet.

Problemet er at hvis du starter en ny tråd og fra den metode som du har startet på den nye tråd forsøger at opdatere din progrressbar, så vil programmet fejle. Det er nemlig ikke tilladt.

En background worker kan hjælpe dig her, fordi den har et event som du kan drage fordel af.

Det er nok nemmere at vise end forklare.

Prøv at kigge på mit eksempel her:

http://www.r-coding.dk/downloads/eksperten/backgroundworkereksempel2.zip

Mvh.
Lasse
Avatar billede 2c Nybegynder
15. januar 2010 - 09:30 #2
Det er noget tid siden jeg har lavet winforms, men kan du ikke skrive
Thread.Sleep(1000);
inde i din foreach løkke?
Avatar billede Syska Mester
15. januar 2010 - 12:35 #3
Nej, problemet er jo at WinFormen ikke bliver opdateret før end tråden er færdig ...

Der er flere løsninger på problemet ... lasserach har en ok løsning.

// ouT
Avatar billede bvli Praktikant
15. januar 2010 - 14:20 #4
Mon ikke 2c var noget ironisk?
Avatar billede 2c Nybegynder
15. januar 2010 - 15:01 #5
Nej, jeg mente det sq :-) Men jeg skrev jo også det var længe siden jeg havde lavet winforms :-)
Avatar billede Syska Mester
15. januar 2010 - 15:02 #6
Jeg er lidt i tvivl ...

I så fald synes jeg ikke lige den passer ind her.
Avatar billede Syska Mester
15. januar 2010 - 15:03 #7
Glemte lidt noget ...
Da jeg har læst mange andre af hans indlæg på eksperten, så ville jeg bestmet ikke mene at det ligner 2c at komme med sådan en kommentar.

// ouT
Avatar billede janus_007 Nybegynder
16. januar 2010 - 20:57 #8
I de gamle dage hvor VB6 var et hit kunne man tit redde sådanne situationer med Sleep(0), så 2c er da ikke helt på vildspor *GG*, men jeg ville nok ikke løse det sådan i dag :) Specielt ikke efter thread handling er blevet så ligetil.
Avatar billede Syska Mester
16. januar 2010 - 21:45 #9
2c:
Nej, mener heller ikke du plejer at komme med ironiske bemærkningen og de hører da slet ikke hjemme her, så ved ikke hvor "bvli" ville hen med den kommentar :-)

janus_007:
Nej, der var nok heller ikke så mange gerne dengang :-) og arkitekturen i .NET ... i forhold til VB6 vil jeg også formode er helt andeledens.

// ouT
Avatar billede bvli Praktikant
16. januar 2010 - 21:59 #10
At vente 1 sekund for hver iteration i en foreach-løkke, som i forvejen tager så lang tid, at man reelt mærker at gui'en bliver iresponsiv er ikke seriøst. Det var derfor jeg mente at det måtte have været ironi! Måske det kunne have været bare en smule tilforladeligt, hvis forslaget havde gået på "Thread.Sleep(0)" eller en "Application.DoEvents()", så kunne det undskyldes med "gamle VB-unoder".

Anyway - spørgsmålet burde være en faq. Der er blevet svaret på det omkring 3 mio. gange og det er bestemt en kandidat til en sticky thread, hvis sådanne havde fandtes herinde.

Fortsat god weekend! :)
Avatar billede Syska Mester
16. januar 2010 - 22:05 #11
Yes, burde klart i en thread ... har tit overvejet at blogge om det, men tjaaaa ... men i hvert fald en god kandidat til det.

// ouT
Avatar billede nidyahou Praktikant
20. januar 2010 - 23:41 #12
BackgroundWorker FTW. drop svar m8s. P.S tak for diskussionen. Så blev jeg også så klogere. Hvis der er nogen der har gode tuts til noget mere hardcore threading kunne jeg godt tænke mig at læse noget.
Avatar billede lasserasch Juniormester
21. januar 2010 - 10:44 #13
Hvad betyder FTW? Er vist ikke helt opdateret på forkortelser :-)
Avatar billede lasserasch Juniormester
21. januar 2010 - 10:45 #14
Og hvad betyder m8s?

Mvh.
Lasse
Avatar billede nidyahou Praktikant
21. januar 2010 - 12:43 #15
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester