Benutzer mit den meisten Antworten
Textdatei auslesen dauert sehr lange und blockiert dadurch die Hauptanwendung

Frage
-
Hallo zusammen,
ich habe ein einfaches Programm in VB geschrieben, welches Daten aus einer Textdatei ausliest und diese nach bestimmten Kriterien durchsucht. Soweit funktioniert alles fehlerfrei, aber die Textdatei ist mitunter sehr groß, die Ladezeit dadurch sehr lang. Problem ist, das der Benutzer während dessen mit der Hauptanwendung nicht arbeiten kann. Wie kann ich realisieren, das die Textdatei im Hintergrund ausgelesen wird und der Nutzer trotzdem mit der Anwendung arbeiten kann? Hat jemand einen Tipp?
VG Oli
Antworten
-
Hallo,
dafür musst du das Verarbeiten der Datei in einen 2. Thread auslagern. Dafür bietet sich beispielsweise der BackgroundWorker an. Mit diesem (oder einer der anderen Threadbasierten Klassen) kannst du dann die Datei parallel zur GUI verarbeiten. Du musst dabei natürlich beachten, das der Benutzer nicht ein 2. mal auf die Datei zugreift etc.PS: Weiterhin müssen Zugriffe auf die GUI aus einem anderen Thread u.U. über die Invoke-Methode (WinForms) oder den Dispatcher (WPF) erfolgen. Das hat den Hintergrund, dass immer nur der GUI trhead auch auf die GUI zugreifen darf. Über die jeweiligen Technologien werden die Threads kurzzeitig synchronisiert und alles läuft wieder nacheinander ab.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets
- Bearbeitet Tom Lambert (Koopakiller)Moderator Montag, 19. Januar 2015 16:11 PS
- Als Antwort markiert Oli Berger Montag, 19. Januar 2015 16:14
Alle Antworten
-
Hallo,
dafür musst du das Verarbeiten der Datei in einen 2. Thread auslagern. Dafür bietet sich beispielsweise der BackgroundWorker an. Mit diesem (oder einer der anderen Threadbasierten Klassen) kannst du dann die Datei parallel zur GUI verarbeiten. Du musst dabei natürlich beachten, das der Benutzer nicht ein 2. mal auf die Datei zugreift etc.PS: Weiterhin müssen Zugriffe auf die GUI aus einem anderen Thread u.U. über die Invoke-Methode (WinForms) oder den Dispatcher (WPF) erfolgen. Das hat den Hintergrund, dass immer nur der GUI trhead auch auf die GUI zugreifen darf. Über die jeweiligen Technologien werden die Threads kurzzeitig synchronisiert und alles läuft wieder nacheinander ab.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets
- Bearbeitet Tom Lambert (Koopakiller)Moderator Montag, 19. Januar 2015 16:11 PS
- Als Antwort markiert Oli Berger Montag, 19. Januar 2015 16:14
-
-
Hallo zusammen,
ein spätes Feedback zur Lösung: habe den Backgroundworker eingesetzt. Habe die eigentliche Abfrage (beinhaltet die Speicherung der Daten in einer SQL DB) in eine Funktion ausgelagert. Die hat als Rückgabewert nur ob alles funktioniert hat und wenn nicht den Fehler. Der Rückgabewert wird in e.Result gespeichert, so das ich den dann später anzeigen kann. Direkt aus der Funktion (= aus dem anderen Thread) funktioniert es nicht.
Danke für die Hilfe, VG Oli Berger