Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 06, 2025 22:25

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Threading und UI aktuallisierung
BeitragVerfasst: Fr Feb 26, 2010 13:34 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Servus,

Ich schreibe gerade eine Applikation welches massenhaft Regex Operationen über Dateinamen (Über 100k) macht und das über 10 threads verteilt.
Die Ergebnisse werden in eine Listview gespeichert.
Pro Datei hab ich so aktuell 10 regexe die überprüft werden, somit dauert der vorgang schon ein paar sekunden.
Tendenziell steigen die Anzahl der Regexe pro Datei, weswegen ich gerade versuche einen Progress anzuzeigen.

Leider klappt das mit dem Progress nicht lange. Irgendwann aktuallisiert sich die UI nicht mehr.

Das war die kurzfassung.



Nun wie ich das ganze implementiert habe:

Ich habe einen Hauptthread, der mittels eines Start/Stop button gestartet, abgebrochen werden kann mit Lowest Priority und IsBackground = True.

Sobald der Thread anläuft, dann werden weitere 10 Threads erzeugt und gestartet die in einem Array zwischengespeichert werden und wartet in einer while loop solange bis alle Threads fertig sind.

Jeder dieser Threads enthält eine Queue und durchläuft diese. Der Thread ist in einer Klasse gekapselt, damit ich den Queue.Count abfragen kann. Jeder dieser Threads enthält eine Referenz auf ein Listview und schreibt bei bedarf dort auch Einträge rein. Mehr passiert in diesen 10 Threads nicht.

In der While-Loop des Hauptthreads wird, sobald geguckt wurde, wieviel threads noch laufen, der aktuelle fortschritt in einer Progressbar sowie ein paar statistics infos in label ausgegeben.
Danach wird der Thread 100 msecs schlafen gelegt, es reicht mir wenn ich jede 100 msec ein update bekomme.

Mein Problem ist ja wie oben beschrieben, die Labels sowie die Progressbar aktuallisiert nicht mehr und die UI reagiert nicht mehr. Ein Application.DoEvents hat leider auch nicht geholfen.



Wie kann ich das in den Griff kriegen, so das die UI reagiert auch wenn meine Threads einiges zu tun haben
und auch im UI sachen verändern dürfen ?




Und hier ein bischen code:
http://nopaste.info/5ffacc15c1.html

So es beginnt alles mit der Methode "ScanTitles(ICollection<FileEntry> ientries)".
Da drin ab dem kommentar "Fill threads with titles" werden die 10 Threads erzeugt mit Dateien gefüllt die aus "ientries" kommen und gestartet.

Danach beginnt die while-loop für den Haupt thread die die UI aktuallisiert.

Der eigentliche Thread code für die unter thread befindet sich in der Klasse "TitleThread" unter der Methode "ThreadProc".

Den Rest kann ich bei bedarf auch noch erklären.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Threading und UI aktuallisierung
BeitragVerfasst: So Mär 07, 2010 11:18 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Hat sich erledigt, kann man schliessen.

Wenn man Locks richtig setzt und Ergebnisse zwischenspeichert anstatt direkt zu schreiben,
geht das wunderbar.

Endlich hab ich gerafft was CriticalSections sind O_o


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.006s | 14 Queries | GZIP : On ]