Backgroundworker und Progressbar

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von bla.

    Backgroundworker und Progressbar

    Johi,
    Ich arbeite grade an einem kleinem Projekt, was eig. nur Dateien mit IO kopiert.
    Nun habe ich die Frage, da ich den Backgroundworker benutze, wie ich den Fortschritt in einer Progressbar anzeigen lasse.

    Danke

    BackgroundWorker

    Bevor ich hier viel erkläre schau dir mal diese Video vom Softwareentwicklerblog an:

    youtube.com/watch?v=RMIOVVLhUvE

    Hat mir auch geholfen.

    Im Prinzip musst du nur das ReportProcess Event abfangen, im ProcessWorker dieses Event auch erlauben und in der Sub die du im Hintergrund laufen lässt mit der Methode sender.ReportProcess (glaub ich zumindest dass sie so heißt) den Fortschritt aktualisieren.
    ein beispiel, dass ich mir immer mal wieder anschaue:

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Public Class Form1
    3. Private WithEvents bgw As New BackgroundWorker
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. 'so startet man den bgw
    6. bgw.RunWorkerAsync()
    7. End Sub
    8. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    9. 'prüft ob der bgw noch läuft und beendet diesen dann
    10. 'bedingung - siehe form_load
    11. If bgw.IsBusy Then
    12. bgw.CancelAsync()
    13. End If
    14. End Sub
    15. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    16. 'erlaubt zugriff auf die windows form
    17. bgw.WorkerReportsProgress = True
    18. 'erlaubt unterbrechung des bgw z.b. wenn das programm beendet wird
    19. bgw.WorkerSupportsCancellation = True
    20. End Sub
    21. #Region "BackGroundWorker Events"
    22. Private Sub bgw_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgw.DoWork
    23. Dim p As Long
    24. For i As Integer = 0 To 10000000
    25. If bgw.CancellationPending = True Then e.Cancel = True : Exit Sub
    26. p += 1
    27. Next
    28. 'um etwas in der windows form (anderer prozess) ausgeben zu können muss das
    29. 'bgw_progesschanged event ausgelöst werden
    30. 'z.b. so
    31. bgw.ReportProgress(100, p) 'im zweiten parameter kann ein objekt übergeben werden
    32. End Sub
    33. Private Sub bgw_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgw.ProgressChanged
    34. 'von hier aus, kann auf die windows forms zugegriffen werden
    35. 'aber auch nur von hier aus
    36. Label1.Text = e.UserState.ToString
    37. End Sub
    38. Private Sub bgw_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgw.RunWorkerCompleted
    39. If e.Cancelled = True Then MsgBox("nein")
    40. MsgBox("ja")
    41. 'dieses event wird angesprungen, wenn alles was in bgw_dowork abgearbeitet wurde.
    42. End Sub
    43. #End Region
    44. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    45. bgw.CancelAsync()
    46. End Sub
    47. End Class
    Für ein Mindestmaß an Rechtschreibung, Interpunktion und Majuskeln!