2013-01-08 11 views
6

Powiel możliwe:
.NET progressbar not updatingVB.NET Progress Bar

Zbudowałem postępu klasę bar, który pokazuje postęp w moim pętli. Oto kod dla klasy pasek postępu:

Public Class frmProgress 
Private Sub frmProgress_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    progressBar.Minimum = 0 
End Sub 

Public Sub ProgressBarSetup(ByRef Maximum As Integer, ByRef Title As String) 
    progressBar.Maximum = Maximum 
    progressBar.Value = 0 
    Me.Text = Title 
    Me.Show() 
End Sub 

Public Sub IncProg() 
    progressBar.Value += 1 
    Application.DoEvents() 

    If progressBar.Value = progressBar.Maximum Then 
     Me.Close() 
    End If 
End Sub 
End Class 

Oto jak chciałbym użyć go w pętli for:

Dim pb As New ProgressBar 
pb.ProgressBarSetup(5000, "Test") 

For i As Integer = 0 To 5000 - 1 
     pb.IncProg() 
Next 

Zagadnienie to problem wizualne. Uzupełnia do 70-85% pełnego paska postępu, a następnie zamyka się. Po zamknięciu wartość paska postępu i wartości maksymalne są równe, ale pasek jest wypełniony tylko do około trzech czwartych jego długości.

Próbowałem używać progressBar.Refresh() zamiast Application.DoEvents(), ale spowalnia to działanie o wiele - i nadal daje mi taki sam wynik.

Czy istnieją inne sposoby na uzyskanie lepszego wizualnie paska postępu?

Odpowiedz

12

Ten efekt jest normalny w systemie Windows 7. Problem polega na tym, że po ustawieniu wartości na X przesuwa się do tej pozycji w ciągu następnych 0,5-1 sekundy. Jeśli więc Twoje działanie dzieje się szybko, zobaczysz je tylko w 50-80%. Rozwiązaniem jest najpierw ustawić na wyższą wartość, a następnie zmniejszyć do pożądanej. Coś takiego:

progressBar.Value += 2 
progressBar.Value -= 1 

a także nie zapomnij, aby zwiększyć maksymalnie tymczasowo, lub może pojawić się wyjątek, na przykład, gdy zwiększany od 4999 do 5000 (nie można ustawić do 5001).

+0

Dobra, spróbuję tego. i Tak, zapomniałem umieścić 5000-1: p Był to tylko przykład. Dzięki! Pójdę i spróbuję tego teraz. – Alex

+0

Idealny. To działa! Doskonały. Przyjmuję odpowiedź, gdy tylko strona mnie pozwoli :) Bardzo doceniam! – Alex

+0

dziękuję! To doprowadzało mnie do szału, ustawiłem na 50 (%), a to tylko do 1/3 ... – Sebastian

Powiązane problemy