In Ordnung, so könnte dies ein wenig schwer zu erklären, aber hier sind wir.Wie kann ich einen Timer machen Schritt für Schritt anstelle von progressbar.value
Intro:
ich Dateien in 9 Kanäle verlasse mich. Jeder Kanal ist im Grunde ein Pfad (Like \ Server \ Freigabe \ Ordner). Im Moment habe ich einen Timer und eine Fortschrittsleiste. Wenn progressbar.value = 10
, wird channel 1
gesucht. When progressbar.value = 20
, channel 2
wird gesucht (durchsucht werden die Dateien innerhalb des angegebenen Pfades gezählt). Und so weiter bis zum Wert 100. Bei Wert 100 wird auf den Wert 1 zurückgegangen und neu gestartet.
Das Problem mit diesem, dass einige der Wege, die in den Kanälen sind, eine riesige Menge von Dateien haben, so wird es einige Zeit dauern, bis es fertig ist und es scheint das Programm zu verzögern, wenn es das progressbar.value trifft Der Kanal mit vielen Dateien ist angehängt.
Was ich suche:
So möchte ich nicht einen Timer, der auf das Intervall basierend zählt und dann alles, was sich verlassen. Ich möchte den Kanal zählen, und wenn es vollständig ist, möchte ich zum nächsten Kanal weitergehen. Grundsätzlich so: Channel 1, counting, complete, moving to channel 2.
Channel 2, counting, complete, moving to channel 3.
Also weiter ... Aber es muss genau und kontrolliert sein. Also sollte jeder Kanal sagen, Minimum eine Sekunde.
Ja, ich will nicht, dass es ständig zählt. Es sollte jeden Kanal bis zur Vollständigkeit zählen, aber wenn in sehr kurzer Zeit (sagen wir zum Beispiel 5 Millisekunden) abgeschlossen ist - warten Sie noch eine Sekunde oder so und fahren Sie dann mit dem nächsten Kanal fort. Um das zu erreichen, habe ich ein paar Dinge ausprobiert, aber keines funktioniert so, wie ich es möchte. Siehe weiter unten.
es hier der Zähler, die
innerhalbtimermain.tick
ist
pbMain.Increment(1)
'Channel 1
If cbc1.Checked = True Then
If pbMain.Value = 10 Then
Try
Dim fileTotal As Integer
For Each item As String In lbChannel1.Items
fileTotal += My.Computer.FileSystem.GetFiles(item.ToString, FileIO.SearchOption.SearchTopLevelOnly, (tbExt1.Text)).Count
Next
tbCount1.Text = String.Format("{0}", fileTotal.ToString)
Catch ex As Exception
lbErrors.Items.Add(String.Concat(TimeOfDay & " Error 001: ", ex.Message)) 'Error output
End Try
Dim tCount As Integer = 0
End If
End If
'Channel 2
'... same as above. Then channel 3, 4, 5, 6, 7, 8 and 9...
Sie werden die pbmain.value = 10 then
bemerken, die die progressbar ich gesprochen haben. Und lbchannel1.items
ist der Kanal, der eine Listbox mit Pfaden als Elemente ist. Dies wiederholt sich für alle 9 Kanäle, aber die anderen sind bei pbmain.value 20, 30, 40, 50, 60, 70, 80 und 90, während die in meinem Code oben bei Wert 10 ist.
Die Frage :
Wie kann ich dies tun, aber nicht progressbar.value als eine Möglichkeit, die Zählung für die Kanäle zu aktivieren? Es ist nicht sehr genau.
Nach der Frage geschrieben habe ich tried performstep
und thread.sleep
++. Sehen Sie sich die Updates an.
PS: Ich brauche keine Fortschrittsanzeige. Es ist nicht für visuelle Effekte da.
Update # 1:
Statt pbmain.increment(1)
ich einen pbmain.performstep()
zwischen jedem Kanal hinzuzufügen versucht, so zählt und wenn das ist, füllen Sie springt es zum nächsten Kanal und zählt.Könnte funktionieren, aber es ist überhaupt nicht kontrolliert und damit loopt es wie verrückt. Also das, aber irgendwie kontrolliert wäre toll. Es sollte nicht Millisekunden zwischen jedem Kanal, aber eine Sekunde oder so verwenden. Die Anwendung soll kontrolliert gezählt werden, nicht ständig.
Update # 2:
erhielt ein Spitzen von Plutonix in den Kommentaren progressbar Marquee
Modus, um zu versuchen, die ich zur Zeit versuche ich.
Update # 3:
Ich versuchte Thread.sleep zwischen jeder Zählung, aber es scheint wirklich schlecht um das Programm zu gefrieren. unter Verwendung eines für jede Schleife
Sie Arent gehen genau in der Lage sein, um eine progressbar zu erhöhen. Hast du die ProgressBar im Marquee-Modus ausprobiert? – Plutonix
Hmm nein, davon habe ich noch nicht einmal gehört. Ich werde etwas darüber recherchieren. – MadsTheMan
Wenn du sagst: "Ich habe die Fortschrittsleiste ausgeblendet", heißt das, dass die Fortschrittsleiste nicht angezeigt wird? Wenn es nicht sichtbar ist, wozu dann eine Fortschrittsleiste? –