Announcement

Collapse
No announcement yet.

Hintergrund Thread

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hintergrund Thread

    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:

    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
    Zuletzt editiert von strzata; 18.01.2015, 13:14.
Working...
X