[VB] Interface valt weg bij installatie

Pagina: 1
Acties:

  • CBA
  • Registratie: November 2000
  • Laatst online: 21:50

CBA

een vat, een vat, een vat !

Topicstarter
Ik heb een installatie interface gemaakt die ervoor zorgt dat er bestanden gekopieerd worden naar een bepaalde map die uit de registry ingelezen wordt.

Het probleem is als volgt, de interface loopt goed, alles werkt perfect, alleen als ik veel bestanden moet kopieren dan wordt de interface doorzichtig, de titelbalk blijft zichtbaar maar waar normaal de knoppen en achtergrond staat, zie ik ineens m'n bureaublad door m'n programma.

Dit is waarschijnlijk dat hij te weinig tijd heeft om het scherm te refreshen terwijl het programma volop aan het kopiëren is.

Is er één of andere manier dat ik dit kan opvangen zodanig dat de interface altijd zichtbaar blijft, dat desnoods het kopiëren iets trager gebeurt?

Diablo 3 Profiel - WoW Warrior


Verwijderd

Gebruik de functie DoEvents. Hiermee geef je andere processen de mogelijkheid om hun taken uit te voeren.

Zie ook mijn verhaal op :Z http://gathering.tweakers.net/forum/list_messages/641705

[ Voor 32% gewijzigd door Verwijderd op 12-12-2002 11:29 . Reden: Link toegevoegd ]


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Je hebt die installatie interface zelf gemaakt?
DoEvent triggeren wel nog wel eens helpen. Als je een statusbar gebruikt kun je de proberen wat vaker te refreshen. Ook een Form repaint kan wonderen doen.

It’s nice to be important but it’s more important to be nice


  • CBA
  • Registratie: November 2000
  • Laatst online: 21:50

CBA

een vat, een vat, een vat !

Topicstarter
Ik heb al gebruik gemaakt van

Me.refresh &
DoEvents

Maar geen één hielp.

Diablo 3 Profiel - WoW Warrior


Verwijderd

Zou je de code ff kunnen posten?

  • CBA
  • Registratie: November 2000
  • Laatst online: 21:50

CBA

een vat, een vat, een vat !

Topicstarter
JonkieXL schreef op 12 December 2002 @ 11:28:
Je hebt die installatie interface zelf gemaakt?
DoEvent triggeren wel nog wel eens helpen. Als je een statusbar gebruikt kun je de proberen wat vaker te refreshen. Ook een Form repaint kan wonderen doen.
Inderdaad de installatie interface is zelf gemaakt.
Als ik DoEvents uitvoer dan stopt het programma met de bestanden kopieren en voert hij ineens m'n code uit die na het kopiëren van de bestanden moet gebeuren, namelijk het unloaden van het form en een nieuw form inladen.

Als ik dit gebruik blijkt vb van de 300 bestanden die ik moet kopieren er maar een 20-tal gekopieerd zijn.

Diablo 3 Profiel - WoW Warrior


  • CBA
  • Registratie: November 2000
  • Laatst online: 21:50

CBA

een vat, een vat, een vat !

Topicstarter
Verwijderd schreef op 12 December 2002 @ 11:34:
Zou je de code ff kunnen posten?
Wat wil je juist zien van de code ?
het kopieren van de bestanden ?

code:
1
2
3
4
5
6
7
            For Each fsoFile In fsoFileFolder.Files
                fsoFile.Copy Nieuwpath, True
                'x = x + 1
                'Me.Refresh
                'DoEvent
                ProgressBar1.Value = ProgressBar1.Value + 1
            Next fsoFile

Diablo 3 Profiel - WoW Warrior


  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 07-07 01:04

ZaZ

Tweakers abonnee

'DoEvent
Dan klopt het wel dat ie niks doet
Met het " ' " teken is het een comment

Lekker op de bank


Verwijderd

Dan klopt het wel dat ie niks doet
Met het " ' " teken is het een comment
Zou ie dat niet weten?

  • CBA
  • Registratie: November 2000
  • Laatst online: 21:50

CBA

een vat, een vat, een vat !

Topicstarter
ZaZ schreef op 12 December 2002 @ 11:42:
[...]

Dan klopt het wel dat ie niks doet
Met het " ' " teken is het een comment
Ja tuurlijk weet ik ook wel :)
Had ik uitgezet omdat dan m'n code juist niet volledig uitgevoerd wordt.

Diablo 3 Profiel - WoW Warrior


  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 07-07 01:04

ZaZ

Tweakers abonnee

Je weet het maar nooit :D

Lekker op de bank


  • CBA
  • Registratie: November 2000
  • Laatst online: 21:50

CBA

een vat, een vat, een vat !

Topicstarter
ja dus

even terug on topic aub

Diablo 3 Profiel - WoW Warrior


Verwijderd

Zeg heb je haast? Ik ben aan het zoek voor je. Ik vind het namelijk raar als jij DoEvents aanroep dat hij dan uit de loop springt. Misschien een hele domme opmerking, maar deze loop draait toch niet asynchroon van je overige code (zeg maar Out-of-process)

  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 07-07 01:04

ZaZ

Tweakers abonnee

Zover ik weet hoef je Me.Refresh niet aan te roepen als je DoEvents gebruikt, omdat dit alleen maar overbodig is.
Je schrijft nu wel buiten de Basic taal om, dus is het moeilijker om de fouten te vangen

Lekker op de bank


  • CBA
  • Registratie: November 2000
  • Laatst online: 21:50

CBA

een vat, een vat, een vat !

Topicstarter
Verwijderd schreef op 12 december 2002 @ 11:55:
Zeg heb je haast? Ik ben aan het zoek voor je. Ik vind het namelijk raar als jij DoEvents aanroep dat hij dan uit de loop springt. Misschien een hele domme opmerking, maar deze loop draait toch niet asynchroon van je overige code (zeg maar Out-of-process)
Neen ik heb geen haast, maar voor grappen is er een apart forum.

Na m'n loop wordt er een nieuw form ingeladen en het huidige uitgeladen.

Diablo 3 Profiel - WoW Warrior


Verwijderd

Kan je hem tracen en controleren of en waar hij eruit klapt?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 24-08 22:38
CBA schreef op 12 december 2002 @ 11:39:
[...]


code:
1
2
3
4
5
6
7
            For Each fsoFile In fsoFileFolder.Files
                fsoFile.Copy Nieuwpath, True
                'x = x + 1
                'Me.Refresh
                'DoEvent
                ProgressBar1.Value = ProgressBar1.Value + 1
            Next fsoFile
Je weet wel dat het DoEvents is en niet DoEvent ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • CBA
  • Registratie: November 2000
  • Laatst online: 21:50

CBA

een vat, een vat, een vat !

Topicstarter
farlane schreef op 12 December 2002 @ 12:04:
[...]


Je weet wel dat het DoEvents is en niet DoEvent ?
yep maar in het andere topic stond er DoEvent, even geprobeerd maar ik kreeg een error :)

Diablo 3 Profiel - WoW Warrior


  • johnwoo
  • Registratie: Oktober 1999
  • Nu online

johnwoo

3S-GTE

Die DoEvents staat wel mooi in je loop, maar als je een wat groter bestand aan het kopieren bent dan hangt je thread in de fsoFile.Copy call, en zal je GUI dus totaal niet geupdate worden.

Je zult het kopieren dus in een aparte thread moeten doen.

Bijvoorbeeld op deze manier:
Maak twee vlaggetjes: bCopying en bAllDone, en een string: strFileToCopy, en start een aparte thread met CreateThread. Het enige wat die thread doet is in een loopje wachten op kopieer commando's:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub fnCopyThread()
   Do Until bAllDone
      If bCopying = True Then
         ' De main thread heeft aangegeven dat er wat gekopieerd moet worden:
         FileCopy strSourceFolder & "\" & strFileToCopy, strDestinationFolder & _
                  "\" & strFileToCopy
         bCopying = False ' Laat de main thread weten dat het kopieren klaar is.
      Else
         Sleep 200  ' Om te voorkomen dat deze thread 100% CPU trekt
                    ' als er niks gekopieerd wordt. Nadeel 1: er kan maximaal
                    ' 1 file per 200 ms gekopieerd worden. Nadeel 2: nadat je
                    ' bAllDone hebt gezet duurt het nog even voor de thread
                    ' echt weg is. Oplossing: semafoor/andere mooie wait
                    ' constructie.
      End If
   Loop
End Sub


In je main thread kan je deze copy thread nu opdracht geven om een file te kopieren door strFileToCopy te vullen met de filename, en vervolgens bCopying op True te zetten. strSourceFolder en strDestinationFolder stel je ook eerst even in.
Als het bestand klaar is met kopieren staat bCopying weer op False, en kan je hem de volgende file voeren.
Als je programma klaar is met alle files, zet je bAllDone op True. De thread zal dan uit de loop springen en zichzelf beeindigen.

Zolang je het niet veel ingewikkelder maakt dan dit (met een paar vlaggetjes, en niet meer dan 2 threads - main en worker - die gesynchroniseerd hoeven te worden) werkt dit prima in VB. Je zou het nog wat mooier kunnen doen met een semafoor oid (dan ben je ook van die Sleep af), maar zo'n vlaggetje is lekker sim-pel ;)

Voor kleine files is dit asynchroon kopieren niet echt nodig, je zit met de vertraging in de copy thread. Files kleiner dan 100 KB ofzo zou je in de main thread zelf kunnen doen, zonder het bCopying vlaggetje om te gooien.

Voor de echte bikkels onder ons: als er een groot bestand wordt gekopieerd op de achtergrond zou je een klein bestand op de voorgrond kunnen doen, parallel ;)

[ Voor 47% gewijzigd door johnwoo op 12-12-2002 12:30 ]

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • CBA
  • Registratie: November 2000
  • Laatst online: 21:50

CBA

een vat, een vat, een vat !

Topicstarter
johnwoo om eerlijk te zijn begrijp ik er niet veel van :)

Ik begrijp wel wat je wilt zeggen, maar niet hoe ik het moet oplossen van die threads en ook hoe ik het zou moeten toepassen.

Diablo 3 Profiel - WoW Warrior


  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

hrrmz... John Woo ik heb een vraagje: al die letters aan het begin van je var/sub namen, wat betekenen die? Ok b(oolea), str(ing) en int(eger) kende ik al, maar wat is die fn?

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
MUBA schreef op 13 December 2002 @ 12:36:
hrrmz... John Woo ik heb een vraagje: al die letters aan het begin van je var/sub namen, wat betekenen die? Ok b(oolea), str(ing) en int(eger) kende ik al, maar wat is die fn?
gokje: fn = function ?

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

maar da was een SUB!

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
of een functie zonder return-waarde :) tis maar hoe je het bekijkt.

  • johnwoo
  • Registratie: Oktober 1999
  • Nu online

johnwoo

3S-GTE

uhh.. fn is idd function :)
Het moet eigenlijk ook een function zijn (een thread function moet een DWORD teruggeven).

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1

Pagina: 1