Avatar billede kristianiversen Nybegynder
19. maj 2009 - 16:06 Der er 10 kommentarer og
1 løsning

Dårlig opdatering af brugeroverflade

Hej herinde.

Jeg oplever, at visual basic 6.0 programmer ikke opdaterer brugeroverfladen, når det givne program udsættes for resursekrævende opgaver.

F.eks. hvis man beder den om at tjekke et eller andet i en stor fil med en while løkke, og samtidig gerne vil ændre en Label's caption for at vise status over hvor langt den er, så "fryser" programmet nærmest, og captionen bliver ikke opdateret. I stedet bliver Label-boksen lavet om til en hvid boks. Først når den krævende opgave er færdig, vil visual basic opdaterer brugeroverfladen.

Dette vanskeliggøre at lave progress bar og generelt give information til brugeren om, hvor langt programmet er, med en given opgave.

Hvordan kommer man uden om dette?

Med venlig hilsen
Kristian
Avatar billede Slettet bruger
19. maj 2009 - 17:39 #1
Nu kender jeg ikke til Visual Basic, men jeg kan da forestille mig at det ville virke at sætte en lille smule ventetid i starten af while-løkken. Det vil selvfølgelig gøre at opgaven går lidt langsommere, men det vil give captionen tid til at opdatere.
Avatar billede kristianiversen Nybegynder
19. maj 2009 - 18:22 #2
Hej kimsey0,

Ja, det tænkte jeg også. Men der findes vist ikke en "sleep" ligesom i andre sprog, og man er derfor nødsaget til at bruge timers, hvilket jeg ikke har megen lyst til, pga. at det vil kræve en masse omkodning.

Kan det passe for mig eller har jeg overset noget?

Med venlig hilsen
Kristian
Avatar billede Slettet bruger
19. maj 2009 - 21:35 #3
Ifølge http://digiassn.blogspot.com/2006/10/visual-basic-how-to-sleep-or-pause.html kan man bruge funktionen Sleep(milisekunder) hvis man blot inkluderer følgende linie:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Derefter, f.eks.

Sleep(5000)
Avatar billede Slettet bruger
19. maj 2009 - 21:35 #4
Men, det er vist bare en timer, sorry.
Avatar billede Slettet bruger
19. maj 2009 - 21:42 #5
Et andet tip, sikkert også meget ressourcekrævende, men værd at prøve. Lav en variabel, forøg den med én for hver gang while-løkken kører. Ændr captionen hvis variablen er lig 5, 10, 100 eller hvor meget du finder passende, og nulstil den. Kan det bruges?
Avatar billede js_delphi Nybegynder
19. maj 2009 - 22:43 #6
Jeg kender heller ikke meget til VB, men mon ikke det er muligt at udfoere det tunge arbejde i en separat traad?
Avatar billede thomaxz Nybegynder
19. maj 2009 - 22:52 #7
Nu det længe siden jeg har rodet med Visual Basci 6.0

Men kommandoen

DoEvents burde virker, som sagt er det længe siden, så er ikek helt sikker på at syntaksten er korrekt.
Avatar billede arne_v Ekspert
20. maj 2009 - 01:55 #8
Den klassiske løsning på problemet er at køre den krævende opgave i en separat tråd. Men jeg må tilstå at jeg ved ikke hvordan man kører tråde i VB6.

Bedste workaround må være den allerede nævnte DoEvents:

Do
    ' noget som tager lidt tid
    DoEvents
Loop While nogetsomgivermangegennemløb
Avatar billede kristianiversen Nybegynder
20. maj 2009 - 13:19 #9
Hej,

kimsey0 >
Sleep funktionen hjalp desværre ikke på problemet.

thomaxz >
DoEvents virker fremragende. Venligst læg et svar.

js_delphi & arne_v >
Tak for forslaget, jeg er desværre heller ikke klar over, hvordan man kører processen i en seperat tråd.

Tak for hjælpen og tak for forslagene til alle.

Med venlig hilsen
Kristian
Avatar billede biohazard_666 Nybegynder
20. maj 2009 - 15:05 #10
Som Arne og de andre skriver, så smid en "DoEvents" ind, og programmet vil ikke længere fryse :)
Avatar billede thomaxz Nybegynder
25. maj 2009 - 11:42 #11
Svar :)
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
Kurser inden for grundlæggende programmering

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