Ich habe ein Szenario, wo ich eine Sammlung von Objekten zu einem Datagrid in Winforms gebunden haben. Wenn ein Benutzer ein Element auf das Raster zieht und ablegt, muss ich eine Platzhalterzeile in das Raster hinzufügen und einen langwierigen asynchronen Importprozess starten. Ich muss den Status des asynchronen Importprozesses zurück an die Benutzeroberfläche kommunizieren, die Zeile im Raster aktualisieren und die Benutzeroberfläche reaktionsfähig bleiben lassen, damit der Benutzer die anderen Zeilen bearbeiten kann.
Was ist das beste Verfahren dafür?
Meine derzeitige Lösung lautet: Binden einer Thread-sichere Implementierung von BindingList mit den Objekten gefüllt, die als Zeilen im Raster angezeigt werden. Wenn ein Benutzer ein Element auf das Gitter zieht und fallen lässt, erstelle ich ein neues Objekt mit den spärlichen Informationen, die ich von dem fallen gelassenen Element erhalten habe, und füge es der BindingList hinzu, wodurch die Bearbeitung dieser Zeile deaktiviert wird. Dann starte ich einen separaten Thread, um den Import durchzuführen und übergebe ihm das neu gebundene Objekt, das ich gerade erstellt habe, um es mit Daten zu füllen. Der Importprozess setzt in regelmäßigen Abständen den Status des Objekts und löst ein Ereignis aus, das von der Benutzeroberfläche abonniert wird und ihr mitteilt, dass sie das Gitter aktualisieren soll, um die neuen Eigenschaften des Objekts zu sehen.
Sollte ich das gleiche Objekt, das an das Raster gebunden ist, an den Importprozess-Thread übergeben, um zu arbeiten, oder sollte ich eine Kopie erstellen und die Änderungen an das Objekt auf dem UI-Thread mit BeginInvoke zurück zusammenführen?
Gibt es Probleme oder Ratschläge zu dieser Implementierung?
Gracias