VB.NET-Quellcode
- Friend Class frm_ProgressBarAdv
- Friend Sub New()
- Me.InitializeComponent()
- End Sub
- Friend Sub New(ByVal iconstructorCurrentValue As Integer,
- ByVal iconstructorMaxValue As Integer)
- Me.InitializeComponent()
- MyOwnProgressBar.Value = iconstructorCurrentValue
- MyOwnProgressBar.Maximum = iconstructorMaxValue
- End Sub
- Private Sub LoadThisForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
- MyOwnProgressBar.Minimum = 0
- ProgressBarRefresh()
- Me.CenterToScreen()
- Timer200ms.Enabled = True
- End Sub
- Private Sub ProgressBarRefresh()
- If MyOwnProgressBar.Value < MyOwnProgressBar.Maximum Then
- MyOwnProgressBar.Value += 1
- Else
- MyOwnProgressBar.Value = 0
- End If
- End Sub
- Private Sub Timer_Tick(sender As System.Object, e As System.EventArgs) Handles Timer200ms.Tick
- Call ProgressBarRefresh()
- End Sub
- End Class
Ich habe eine eigene ProgressBar geschrieben, die im Grunde nichts weiter tun soll also einen Fortschrittsbalken immer von 0..iMaxValue zu inkrementieren und zwar mittels eines 200ms Timers
Im Hauptform wird die ProgressBar mittels
aufgerufen.
Die ProgressBar öffnet sich auch und dann macht das Hauptprogramm allerlei Dinge die recht rechenintensiv sind. Der Fortschrittsbalken der ProgressBar bewegt sich leider so gut wie gar nicht in dieser Zeit, obwohl der Timer_Tick regelmäßig ausgeführt wird, wird aber die ProgressBar nicht neu gezeichnet. Vermutlich weil die Hauptanwendung die gesamten Ressourcen für sich einnimmt.
Ich habe jetzt schon einiges probiert um das zu ändern. U.A. mit BackGroundWorker und Invoke, aber so richtig auf eine Lösung bin ich noch nicht gekommen. Wobei ich Invoke bevorzugen würde.
Wie ist es möglich, dem frm_ProgressBar einen eigenen Thread zuzuordnen, damit dieser unabhängig von der Hauptanwendung aktualisiert und neu gezeichnet wird?