Hallo,
Ich habe unter msdn.microsoft.com/de-de/library/bb979513.aspx eine ThreadWrapper klasse gefunden, die ich gerne verwenden möchte. Grundsätzlich funktioniert diese auch wunderbar.
Allerdings möchte ich nun ein event hinzufügen, dass aufgerufen wird, wenn der Thread beendet wird. Dabe ist folgendes entstanden:
In der Aufrufenden Klasse habe ich mir ein Sub erstellt, dass nach dem Thread aufgerufen werden soll:
Leider bekomme ich immer die Fehlermeldung: {"Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement lblFertig erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."}
Laut meinen Recherchen müsste ich mit InvokeRequired abfragen, ob ein Invoke notwendig ist. Da es sich aber bei ThreadWrapper sowie der davon erbenden Klasse um eine Normale Klasse und nicht um ein Form handelt, ist natürlich die Methode InvokeRquired nicht verfügbar.
Hat jemand einen tipp für mich, wie ich das ganze lösen kann?
Im Prinzip soll in der Aufrufendne form ein Event ausgelöst / eine Funktion aufgerufen werden, wenn der Thread beendet wurde.
Danke im Voraus
Ich habe unter msdn.microsoft.com/de-de/library/bb979513.aspx eine ThreadWrapper klasse gefunden, die ich gerne verwenden möchte. Grundsätzlich funktioniert diese auch wunderbar.
Allerdings möchte ich nun ein event hinzufügen, dass aufgerufen wird, wenn der Thread beendet wird. Dabe ist folgendes entstanden:
VB.NET-Quellcode
- Public MustInherit Class ThreadWrapper
- 'Quelle: http://msdn.microsoft.com/de-de/library/bb979513.aspx
- ' Dies ist der Thread, in dem der Task ausgeführt wird.
- Public ReadOnly Thread As System.Threading.Thread
- Public Sub New()
- ' Thread erstellen.
- Me.Thread = New System.Threading.Thread(AddressOf Me.StartTask)
- 'With Me.Thread
- ' .IsBackground = True
- ' .Priority = Threading.ThreadPriority.AboveNormal
- ' .Name = "Thread_Irgendwas"
- 'End With
- End Sub
- ' Den Task im Arbeits-Thread starten.
- Public Overridable Sub Start()
- Me.Thread.Start()
- End Sub
- ' Den Task durch einen Abbruch des Threads stoppen.
- ' Sie können diese Methode überschreiben, um stattdessen
- ' eine ordentliche Stopp-Anforderung zu verwenden.
- Public Overridable Sub [Stop]()
- MsgBox("Thread wurde abgebrochen!")
- Me.Thread.Abort()
- End Sub
- ' Den Status des Tasks überwachen.
- Private _IsRunning As Boolean = False
- Public ReadOnly Property IsRunning() As Boolean
- Get
- Return _IsRunning
- End Get
- End Property
- Private Sub StartTask()
- _IsRunning = True
- DoTask()
- RaiseEvent_ThreadComplete()
- _IsRunning = False
- End Sub
- ' Diese Methode enthält den Code, der die eigentliche Aufgabe ausführt.
- Protected MustOverride Sub DoTask()
- Public Sub RaiseEvent_ThreadComplete()
- RaiseEvent ThreadComplete()
- End Sub
- Public Event ThreadComplete()
- End Class
In der Aufrufenden Klasse habe ich mir ein Sub erstellt, dass nach dem Thread aufgerufen werden soll:
Leider bekomme ich immer die Fehlermeldung: {"Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement lblFertig erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."}
Laut meinen Recherchen müsste ich mit InvokeRequired abfragen, ob ein Invoke notwendig ist. Da es sich aber bei ThreadWrapper sowie der davon erbenden Klasse um eine Normale Klasse und nicht um ein Form handelt, ist natürlich die Methode InvokeRquired nicht verfügbar.
Hat jemand einen tipp für mich, wie ich das ganze lösen kann?
Im Prinzip soll in der Aufrufendne form ein Event ausgelöst / eine Funktion aufgerufen werden, wenn der Thread beendet wurde.
Danke im Voraus