vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Dateiname in Listbox eintragen 
Autor: Marty**
Datum: 16.10.18 17:27

Hallo,

mit einem Filesystemwatcher überwache ich ein Verzeichnis auf neue Dateien.
Diese neuen Dateien würde ich gerne in die Listbox eintragen.

Private Sub FSW_Created(sender As Object, e As FileSystemEventArgs) Handles _
  FSW.Created
 
        lb.Items.Add(e.Name)
    End Sub
Leider bekomme ich folgenden Fehler.
AccessibilityObject {"Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement lb erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."} System.InvalidOperationException

Habe schon gelesen das der Filesystemwatcher ein eigener Thread ist.
Wäre schon wenn jeman ne Zeile für mich hätte.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateiname in Listbox eintragen 
Autor: Manfred X
Datum: 16.10.18 17:53

Hallo

Der Zugriff aus einem Thread auch Controls (UI-Thread)
erfordert ein INVOKE, d.h. die zu rufende Routine
wird über ihre logische Adresse aus dem rufenden Thread
heraus identifiziert (Addressof ...).

Hier ein altes Beispiel aus dem Forum (Listview) ....
FullPathToList ist eine String-Variable, auf
Formularebene definiert.
Private Sub fsw_Created(sender As Object, _
    e As System.IO.FileSystemEventArgs) Handles fsw.Created
    FullPathToList = e.FullPath
    listview1.Invoke(New MethodInvoker(AddressOf InsertListItem))
End Sub
 
Public Sub InsertListItem()
 
     If Not IO.File.Exists(FullPathToList) Then Exit Sub
     Dim fi As New IO.FileInfo(FullPathToList)
 
     Dim lwt As Date = fi.LastWriteTime
     Dim lvi As ListViewItem = Nothing
 
     With ListView1
        If lwt >= GetLWT(0) Then
           'frisch geänderte Datei in Ordner eingefügt: an den Listen-Anfang
           lvi = .Items.Insert(0, lwt.ToString)
        ElseIf lwt <= GetLWT(.Items.Count - 1) Then
           'uralte Datei in Ordner eingefügt: anhängen
           lvi = .Items.Add(lwt.ToString)
        Else
           For i As Integer = 0 To .Items.Count - 2
              If lwt < GetLWT(i) AndAlso lwt >= GetLWT(i + 1) Then
                 'Angaben zur Datei in sortierter Liste einordnen
                 lvi = .Items.Insert(i + 1, lwt.ToString)
                 Exit For
              End If
           Next i
        End If
    End With
 
    With lvi
       'Angaben im neuen Listitem ergänzen
       .SubItems.Add(fi.Name)
       .SubItems.Add(fi.FullName)
       'farblich als neu markieren
       .BackColor = Color.LightCyan
       .UseItemStyleForSubItems = True
    End With
End Sub


Beitrag wurde zuletzt am 16.10.18 um 18:03:32 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateiname in Listbox eintragen 
Autor: Marty**
Datum: 16.10.18 18:43

Hallo,

danke für die schnelle Antwort. Leider kapier ich es nicht.
Hat vielleich noch jemand eine Idee ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateiname in Listbox eintragen 
Autor: Kuno60
Datum: 16.10.18 20:32

Hallo,

wenn du den FileSystemWatcher auf eine Form gezogen hast, so tritt kein Problem mit der Threadsynchronisierung auf.
Wenn du den FileSystemWatcher per Code erstellt hast, so weise ihm eine Form zu, auf der sich die Steuerelemente befinden.
Beispiel:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  FileSystemWatcher1.SynchronizingObject = Me
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateiname in Listbox eintragen 
Autor: Marty**
Datum: 18.10.18 17:43

Hallo,

Kuno danke für deine Hilfe.
Kann es sein das der FileSystemWatcher nur auf lokalen Festplatten läuft ?
Wollte einen Pfad auf einen Netzlaufwerk überwachen, und er schlug nicht an. Oder gibt es dafür auch einen Trick ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateiname in Listbox eintragen 
Autor: Kuno60
Datum: 18.10.18 18:04

Hallo,

laut Microsoft sollte es funktionieren.
Zitat: Sie können eine Komponente zum Überwachen von Dateien auf einem lokalen Computer, einem Netzlaufwerk oder einem Remotecomputer erstellen.

Selber hab ich das noch nicht ausprobiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateiname in Listbox eintragen 
Autor: Manfred X
Datum: 18.10.18 18:31

Hallo!

Wie Kuno60 bereits mitgeteilt hat, sollte der Watcher
auch auf Netz-Laufwerken das Dateisystem überwachen können.
Allerdings wird das Verhalten dieser Komponente hinsichtlich
der Änderungs-Benachrichtigungen (Art und Menge) in Foren
kritisiert. Das Verhalten scheint auch von der Version des
Betriebssystems abhängig zu sein.

Wenn Du nur eine geringe Zahl von Dateien gezielt überwachen
willst, bietet es sich an, statt dessen eine Liste mit den
FileInfos anzulegen und durch ein Timer-Control Änderungen im
Filesystem über den Vergleich mit dieser Liste zu identifizieren.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateiname in Listbox eintragen 
Autor: effeff
Datum: 19.10.18 14:38

Was für ein Netzlaufwerk ist denn das? Normal auf einem Windows-Server? Auf einer NAS? Im Internet?

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateiname in Listbox eintragen 
Autor: Marty**
Datum: 27.10.18 07:53

Hallo,

das ganze funktioniert jetzt.
Unter VirtulBox ging es mit dem Netzlaufwerk nicht.
Ohne VirtualBox lief alles problemlos.

Gruß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel