[VB.NET] Status bar voor het kopieren van bestanden*

Pagina: 1
Acties:

  • Sjoerd
  • Registratie: December 2003
  • Niet online
Ik heb een probleem namelijk dat ik een programma hebt gemaakt om bestanden te kopieren van de ene plek naar de andere, maar dat ik totaal geen idicatie heb hoelang het nog duurt of waar hij mee bezig is, ookal heb ik dit er wel in gebakken.

Het geen wat er gebeurd is dat er in de titelbalk van mijn programma komt te staan "reageert niet" en dat hij na een tijd in 1keer van 0% naar 100% schiet en effectief wel werkt...

Even wat code samples,

code om te kopieren van bestanden en mappen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
'alle bestanden backuppen
            For i As Integer = 0 To UBound(bestanden)
                Dim bestandsnaam As String = My.Computer.FileSystem.GetName(bestanden(i))
                'kijken of het een map of bestand is
                If My.Computer.FileSystem.DirectoryExists(bestanden(i)) = True Then
                    'map
                    My.Computer.FileSystem.CopyDirectory(bestanden(i), backuppath & "/" & bestandsnaam, overschrijven)
                   [b] voortgang("toon", (i / UBound(bestanden) * 100))[/b]
                Else
                    'bestand
                    My.Computer.FileSystem.CopyFile(bestanden(i), backuppath & "/" & bestandsnaam, overschrijven)
                 [b]   voortgang("toon", (i / UBound(bestanden) * 100))[/b]
                End If


code van de "voortgang"
code:
1
2
3
4
5
Sub [b]voortgang[/b](ByVal actie, ByVal waarde)
   ProgressBar.Value = waarde
            lblVoortgang.Text = CStr(ProgressBar.Value) & "%"

End Sub



Dus ondanks dat de sub wordt (getest met Msgbox ook) werkt hij gewoon niet O-) en schiet pas op het einde als alles gekopieerd is in gang en gaat dus meteen van waarde 0 naar 100


:? wat doe ik hier fout? Behalve dat het misschien niet het meest effectieve stukje code is :+

Modelbouw - Alles over modelbouw, van RC tot diorama


  • Cryothic
  • Registratie: September 2001
  • Laatst online: 04-09-2024

Cryothic

why?

Volgens mij moet je af en toe de volgende code aanroepen:
code:
1
Application.DoEvents()

Bijvoorbeeld aan het einde van je For lus.
Dan loopt ie ook de andere processen nog even door voor die het volgende bestand pakt.

  • DemonTPx
  • Registratie: December 2002
  • Laatst online: 27-10 15:40
Ik weet niet hoe het in .net zit, maar in VB6 kon je ook je progressbar en je scherm laten refreshen (of repainten?). Misschien is dat, naast doevents ook wel handig om te gebruiken, zodat niet je venster grijs wordt..

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Is het VB.NET ?
Zoja, kijk dan eens naar threading, of naar de BackGroundWorker class.

https://fgheysels.github.io/


  • Sjoerd
  • Registratie: December 2003
  • Niet online
Bedankt voor de reacties, ga er even mee aan de slag, het is idd vb.net

Modelbouw - Alles over modelbouw, van RC tot diorama


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
het is idd vb.net
Zet dat dan in je titel, want VB.NET is totaal iets anders dan VB.

https://fgheysels.github.io/


  • Sjoerd
  • Registratie: December 2003
  • Niet online
Een combinatie van zowel

- Me.Refresh()
- Application.DoEvents()

doen hun ding! bedankt!, toch ook nog is gaan bezig houden met die threading ziet er interessant uit :)

Modelbouw - Alles over modelbouw, van RC tot diorama

Pagina: 1