title image


Smiley Re: Schreibvorgänge in DataTable sycnhronisieren
Ich habe die Lösung nun doch selbst gefunden. Vielleicht hilft es in Zukunft jemand, deshalb beschreibe ich mal wie ich vorgegangen bin.

Und zwar habe ich von dieser unflexiblen Thread Lösung Abstand genommen und habe mich der asynchronen Ausführung von Delegates zugewandt. Ist meiner Meinung nach wesentlich handlicher als die ThreadStart Lösung, da man sich hierbei nicht damit rumplagen muss, extra Methoden zur Parameterübergabe zu definieren, da der ThreadStart Delegate parameterlos ist. Der Fehler lag weiterhin darin, dass ich die folgende einfach Regel mißachtet habe:

Niemals Änderungen an von System.Windows.Forms.Control abgeleiteten Klassen in einem anderen Thread vornehmen, als in demjenigen, in dem sie erzeugt wurden.



Der Fehler liegt darin, dass ich im separaten Thread die Rows Eigenschaft des DataTable Objektes ändere, welches wiederum

als DataSource mit einem DataGrid Objekt verbunden ist, was wiederum von Control abgeleitet ist.

Um dies zu vermeiden, habe ich in meiner UpdateFileTable Methode, die folgendermassen aufgerufen wird, um asynchron ausgeführt

zu werden:



UpdateTableFromDirectoryDelegate updateDelegate = new UpdateTableFromDirectoryDelegate(this.UpdateFileTable);

updateDelegate.BeginInvoke(this.folderBrowser.SelectedPath, null, null);



die Zeile:

this.fileDataTable.Rows.AddRow(row);



durch

addRowDelegate = new AddRowDelegate(this.fileDataTable.Rows.Add);

this.BeginInvoke(addRowDelegate, new object[] { row });



ersetzt. Damit wird die Änderung im DataGrid asynchron im UI Thread selbst ausgeführt, so wie es die Regel fordert.

Jetzt läuft alles so wie es geplant war.

Danke trotzdem an FZelle, der sich hier bemüht hat, eine Lösung zu finden.



Gruß

JCruiser



Duke  JCruiser
Viel Spaß in Spotlight.de

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: