Laden...

Möglicher ThreadFehler mit Listbox

Erstellt von der Marcel vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.155 Views
der Marcel Themenstarter:in
564 Beiträge seit 2006
vor 18 Jahren
Möglicher ThreadFehler mit Listbox

Hi!

Habe mir ein Projekt erstellt, welches primär jetzt erstmal aus einem Verzeichnis alle Dateien in ein anderes kopieren soll. Da dieser Vorgang ja schon mal etwas Zeit in Anspruch nehmen kann, habe ich die Methode CopyAllFiles in einen Thread ausgelagert.
Sobald ich auf den Button "Kopieren" klicke wird der Thread mit der Methode CopyAllFiles gestartet und arbeitet. Die Methode liegt in einer DLL von mir und sendet über Events den Dateinamen der aktuell zu kopierenden Datei an eine ListBox status_list in meine GUI.
Beim ersten Durchlauf ist alles ok. Mache ich einen zweiten Durchlauf (auch mit anderen Dateien) direkt danach, werden die einzelnen Dateien doppelt in die ListBox eingetragen, beim dritten Durchgang dann 3 Mal und so weiter. Daher ist meine Frage, ob ich den Thread, nachdem CopyAllFiles fertig ist, beenden muss. Meine Versuche mit Thread.GetCurrentThread.Abort() lieferten ein unverändertes Ergebnis.
Die Forumssuche hat für mich leider auch nichts ergeben (zumindest nichts, was ich gefunden hätte 😉 )

Initialisiere den Thread folgendermaßen:

Thread Thread1 = new Thread(new ParameterizedThreadStart(Validation.CopyAllFiles));
            AskForFolder.ShowDialog();
            string rawpath = AskForFolder.SelectedPath + (char)215 + ReadDestinationDir("C:\\Dokumente und Einstellungen\\Marcel\\Desktop\\dongle.sec");
            Thread1.Start(rawpath);

Wenn jemand eine Ahnung hat, wo mein Problem liegen könnte, wäre ich wirkilich dankbar 🙂

Gruß, der Marcel

:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]

6.862 Beiträge seit 2003
vor 18 Jahren

Du sagst ja du arbeitest mit Events, kann sein das du die bei jedem Klick aufm Button neu abonierst? Clearst du die Listview auch vorher immer?

Baka wa shinanakya naoranai.

Mein XING Profil.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo talla,

ich glaube einen EventHander kann man nur einmal registrieren.

Hallo der Marcel,

du löscht aber die ListBox zwischendurch?

Benutzt du Control.Invoke/BeginInvoke, um aus dem Theread auf die ListBox zuzugreifen? Das musst du tun.

herbivore

6.862 Beiträge seit 2003
vor 18 Jahren

Original von herbivore
Hallo talla,

ich glaube einen EventHander kann man nur einmal registrieren.

Hallo der Marcel,

du löscht aber die ListBox zwischendurch?

Benutzt du Control.Invoke/BeginInvoke, um aus dem Theread auf die ListBox zuzugreifen? Das musst du tun.

herbivore

Nö, es hindert niemand einen daran den gleichen Handler nochmal zu registrieren 🙂

Baka wa shinanakya naoranai.

Mein XING Profil.

der Marcel Themenstarter:in
564 Beiträge seit 2006
vor 18 Jahren

Hi herbivore und talla!

Nein, ich hatte nicht vor, die Listbox zu löschen, da sie als laufende Statusanzeige dient und bei meinen Sersuchen (erstmal) auch noch nicht wirklich sehr viel hineingeschrieben bekommt.

Habe eben herausgefunden, dass man EventHandler auch mehrmals hinzufügen kann 😁

Es lag tatsächlich daran, dass ich die Methode zum Schluss nicht mehr vom EventHandler getrennt habe. Somit hat sie beim 3 Durchgang auch 3 Mal die Werte eingetragen (3 mal das selbe Ereignis) 🙂

Arbeite mich noch neu ein, da kann so einen Fehler noch passieren 🙂

Vielen Dank für eure schnellen Antworten!!!

Gruß, der Marcel

:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]