badfsaadkl
Goto Top

Probleme mit FileSystemWatcher (Thread - Übergabe )

Hallo zusammen,

ich habe einen kleinen FileSystemWatcher gebaut, welcher sich das zu überwachende Verzeichniss aus einem Vorhergehenden Formular bezieht.
Der Watcher startet auch ohne Probleme, findet die Dateien mit den Veränderungen...
Aber er gibt mir das Ergebniss nicht in ein Lable aus.

Als Fehler kommt:

"Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement lbl_Watcher erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."

in der Zusammenfassung sieht der Code so aus:

imports system.io

Public Class Watcher
    Private Path2Watch As String
    Private fsw As FileSystemWatcher
    Private mEvt As WaitForChangedResult

Private Sub cmd_startwatch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_startwatch.Click

        fsw = New FileSystemWatcher
        Path2Watch = Directory.GetCurrentDirectory()
        fsw.Path = Path2Watch
        fsw.IncludeSubdirectories = True

        AddHandler fsw.Created, _
          New FileSystemEventHandler(AddressOf IsCreated)

        AddHandler fsw.Changed, _
          New FileSystemEventHandler(AddressOf IsChanged)

        AddHandler fsw.Deleted, _
          New FileSystemEventHandler(AddressOf IsDeleted)

        AddHandler fsw.Renamed, _
          New RenamedEventHandler(AddressOf IsRenamed)

        While True
            mEvt = fsw.WaitForChanged(WatcherChangeTypes.All)
        End While
    End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''  
Private Sub IsCreated(ByVal source As Object, _
    ByVal evt As FileSystemEventArgs)
        If fsw.IncludeSubdirectories = True Then
        lbl_Watcher.Text = (evt.FullPath + " wurde erstellt")  
        Else
        lbl_Watcher.Text = (evt.Name + " wurde erstellt")  
        End If
    End Sub
....

und genau bei dem punkt, wo er den Ihnhalt an das Lable übergeben soll, bricht das Script ab...
die Variable "evt.FullPath" hat die richtigen Werte...gibt diese aber nicht weiter....

hat jemand eine Lösung ???
Oder hab ich irgendwo nur eine Deklaration vergessen ???

Danke

Content-Key: 124066

Url: https://administrator.de/contentid/124066

Printed on: April 26, 2024 at 15:04 o'clock

Member: gijoe
gijoe Sep 02, 2009 at 23:21:53 (UTC)
Goto Top
Hi,
ich kenne mich in deiner Sprache nicht aus, arbeite aber mit C#. Kann es sein dass du mit Threads arbeitest?

Ich rate jetzt mal, dass du aus einem Thread heraus etwas am GUI verändern willst (dein Label). Das darf allerdings ausschliesslich vom Main-Thread her passieren! Wenn du aus einem anderen Thread das Label ändern möchtest, musst du das über einen Dispatcher lösen.

Google doch mal nach wpf vb.net + dispatcher.