Hallo,
ich erstelle derzeit ein Programm, von welchem aus Encodes für Videos angestoßen werden können, und da gerade das ziemlich viele Ressourcen frisst, möchte ich eben in meinem Programm auch anzeigen, wie viele das sind bzw wie viele verfügbar sind.
Daher habe ich mir (vorerst) was simples gebastelt, welches mir alle 100ms die RAM-Auslastung in einer Progress-Bar aktualisiert.
Dabei handelt es sich um eine eigene Komponente, die ich per Code in ein Panel packe (bei Programmstart wenn nicht per Config deaktiviert).
Beende ich nun mein Programm (via x-Knopf eben) haut er mir nen Laufzeitfehler raus:
Der entsprechende Code:
Daher die Frage: Wie beende ich den Thread richtig, bevor er eben die Exception schmeißt, also dann, wenn ich die Anwendung schließe?
ich erstelle derzeit ein Programm, von welchem aus Encodes für Videos angestoßen werden können, und da gerade das ziemlich viele Ressourcen frisst, möchte ich eben in meinem Programm auch anzeigen, wie viele das sind bzw wie viele verfügbar sind.
Daher habe ich mir (vorerst) was simples gebastelt, welches mir alle 100ms die RAM-Auslastung in einer Progress-Bar aktualisiert.
Dabei handelt es sich um eine eigene Komponente, die ich per Code in ein Panel packe (bei Programmstart wenn nicht per Config deaktiviert).
Beende ich nun mein Programm (via x-Knopf eben) haut er mir nen Laufzeitfehler raus:
Der entsprechende Code:
Visual Basic-Quellcode
- Option Compare Binary
- Option Explicit On
- Option Infer On
- Option Strict On
- Imports System.ComponentModel
- Public Class ResourcesView
- Private Delegate Sub SetDeleg(ByVal ram As Integer)
- Private _fullRam As ULong
- Public Sub New()
- ' Designer instanciating
- InitializeComponent()
- ' Own instanciating
- AddHandlers()
- _fullRam = My.Computer.Info.TotalPhysicalMemory
- End Sub
- Private Sub AddHandlers()
- AddHandler Me.Load, AddressOf OnFormLoad
- End Sub
- Private Sub OnFormLoad(ByVal sender As Object, ByVal e As EventArgs)
- Dim bgThread As New Threading.Thread(New Threading.ThreadStart(
- Sub()
- While True
- Threading.Thread.Sleep(100)
- Dim ram As Integer = CalculateAvailabeRam()
- SetSub(ram)
- End While
- End Sub))
- bgThread.Start()
- End Sub
- Private Sub SetSub(ByVal ram As Integer)
- If Me.PRam.InvokeRequired Then
- Dim deleg As New SetDeleg(AddressOf SetSub)
- Me.Invoke(deleg, New Object() {ram})
- Else
- Me.PRam.Value = ram
- End If
- End Sub
- Private Function CalculateAvailabeRam() As Integer
- Dim usRam As ULong = My.Computer.Info.AvailablePhysicalMemory
- Dim avRam As ULong = _fullRam - usRam
- Dim ramP As Integer = CInt(Math.Round(avRam * 100 / _fullRam, 0))
- Return ramP
- End Function
- End Class
Daher die Frage: Wie beende ich den Thread richtig, bevor er eben die Exception schmeißt, also dann, wenn ich die Anwendung schließe?