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:
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 124066
Url: https://administrator.de/forum/probleme-mit-filesystemwatcher-thread-uebergabe-124066.html
Ausgedruckt am: 09.04.2025 um 21:04 Uhr
1 Kommentar
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.
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.