| |
VB.NET - Ein- und UmsteigerDateiname 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. | |
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. | |
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 ? | |
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 | |
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 ? | |
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. | |
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. | |
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 | |
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ß | |
| 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 |
|
|
Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
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
|
|