Timer progressbar

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von m9898.

    Timer progressbar

    Moin,

    ich hab ein Problem mit meinem Timer ;)

    und zwar berechne ich etwas über einen Backgroundworker welcher dann immer eine progressbar auf einem wait_form aktualisiert. Das funktioniert auch soweit. Jetzt wollte ich noch eine "verbleibende Zeit" information wiedergeben.

    Da ich nicht genau weis wie lange jeder loop der brechnungsschleife dauert habe ich mir gedacht ich messe einfach die zeit jedes mal und reche das dann auf die noch bevorstehenden zyklen hoch.

    hier mein ansatz:

    VB.NET-Quellcode

    1. Public Sub calc_ProgressChanged(ByVal sender As System.Object, ByVal e As ProgressChangedEventArgs) Handles calc.ProgressChanged
    2. Dim parts As String()
    3. Select Case e.UserState
    4. Case "Fractions ermitteln ..."
    5. prgbar_wait.Style = ProgressBarStyle.Marquee
    6. stlabel_wait.Text = e.UserState
    7. Case "Marker setzen ..."
    8. prgbar_wait.Style = ProgressBarStyle.Marquee
    9. stlabel_wait.Text = e.UserState
    10. Case "Analysieren ..."
    11. timer1.Interval = 1000
    12. AddHandler timer1.Tick, AddressOf timer1_Tick
    13. timer1.Enabled = True
    14. timer1.Start()
    15. prgbar_wait.Style = ProgressBarStyle.Marquee
    16. stlabel_wait.Text = e.UserState
    17. stlabel_time.Visible = True
    18. Case Else
    19. prgbar_wait.Style = ProgressBarStyle.Continuous
    20. prgbar_wait.Value = e.ProgressPercentage
    21. parts = Split(e.UserState, "#")
    22. stlabel_wait.Text = "Fraction " & parts(0) & " / " & parts(1)
    23. If Not temp_date.Year <> 1800 Then
    24. span = Now().Subtract(temp_date)
    25. span.Add(New TimeSpan(span.Ticks * (parts(1) - parts(0))))
    26. End If
    27. temp_date = Now
    28. End Select
    29. End Sub


    VB.NET-Quellcode

    1. Private Sub timer1_Tick(ByVal sender As Object, ByVal e As EventArgs)
    2. span.Subtract(New TimeSpan(0, 0, 1))
    3. stlabel_time.Text = span.Minutes & ":" & span.Seconds
    4. End Sub


    VB.NET-Quellcode

    1. Friend WithEvents prgbar_wait As System.Windows.Forms.ProgressBar = frm_wait.pgr1_status
    2. Friend WithEvents stlabel_wait As System.Windows.Forms.Label = frm_wait.lbl_status
    3. Friend WithEvents stlabel_time As System.Windows.Forms.Label = frm_wait.lbl_time
    4. Friend WithEvents calc As System.ComponentModel.BackgroundWorker
    5. Friend WithEvents calc_all_files As List(Of source_File) = functions.all_files
    6. Friend WithEvents calc_messurements As List(Of mes_group) = functions.messurements


    das problem an der geschichte ist, dass das Label nicht aktualisiert wird ... hab ich da einen denkfehler ?
    Mach doch mal nach dem Setzen nen Refresh (oder hieß es in vb Reload?!) der Form?
    Me.Refresh
    oder
    Me.Reload

    irgendwie sowas.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Dat is doch genau das Gleiche oO
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    In VB 2008 gibt es dann aber einen Fehler.

    Naja, jedenfalls ist an dem Code ansonsten nichts falsch.
    Setz doch auch mal einen Haltepunkt an die Zeilen "Select Case e.UserState" und "stlabel_wait.Text = "Fraction " & parts(0) & " / " & parts(1)".
    Dann kannst du nachschauen, was in e.UserState und dem Array parts drinnsteht.