Guten Tag,
mir ist leider nicht klar, ob sich ein Hintergrund-Thread selbst beendet oder ob ich ihn per Code beenden muss, bevor er erneut aufgerufen wird.
Ich habe einen FileSystemWatcher, der darüber wacht, ob Dateien in einem bestimmten Ordner eingefügt werden. Im WatcherChanged starte ich einen Hintergrund-Thread, der die Daten dann verarbeitet (Class1). Wenn der Thread damit fertig ist, wird das CallBack aufgerufen. Den Watcher halte ich zwischendurch an und starte ihn dann wieder.
Was passiert jetzt, wenn mit New Class1 der Hintergrund-Thread erneut gestartet wird? Lebt der alte noch? Kann so der Stack überlaufen? Ich blick da nicht durch.
Hier der stark vereinfachte Code:
mir ist leider nicht klar, ob sich ein Hintergrund-Thread selbst beendet oder ob ich ihn per Code beenden muss, bevor er erneut aufgerufen wird.
Ich habe einen FileSystemWatcher, der darüber wacht, ob Dateien in einem bestimmten Ordner eingefügt werden. Im WatcherChanged starte ich einen Hintergrund-Thread, der die Daten dann verarbeitet (Class1). Wenn der Thread damit fertig ist, wird das CallBack aufgerufen. Den Watcher halte ich zwischendurch an und starte ihn dann wieder.
Was passiert jetzt, wenn mit New Class1 der Hintergrund-Thread erneut gestartet wird? Lebt der alte noch? Kann so der Stack überlaufen? Ich blick da nicht durch.
Hier der stark vereinfachte Code:
Code:
Public Delegate Sub BioLabor() Private Sub WatcherChanged(o As Object, e As FileSystemEventArgs) watcher.EnableRaisingEvents = False 'Watcher ausschalten 'Datenverarbeitung asynchron aufrufen Dim labor As New Class1 Dim labftp As New BioLabor(AddressOf labor.Datenverarbeitung) Dim cback As AsyncCallback = New AsyncCallback(AddressOf CallbackFtp) labftp.BeginInvoke(cback, Nothing) End Sub Public Sub CallbackFtp(ar As IAsyncResult) watcher.EnableRaisingEvents = True 'Watcher einschalten End Sub Public Class Class1 Public Sub Datenverarbeitung() 'Do something Thread.Sleep(10000) End Sub End Class