Ich habe ein DevExpress GridControl an eine BindingList gebunden.Benötigen Sie eine Erklärung zur Lebensdauer von Objekten, die in einem Thread erstellt wurden
Ich versuchte, das Binding aus einem Thread und dies hat eine Ausnahme, ich gegoogelt, ihn zu ändern und fand die folgende Erklärung:
Dieses Problem mit dem XtraGrid nicht direkt verbunden. Leider können Sie die Datenquelle des Gitters nicht in einem Hintergrundthread ändern, da dies zu vielen Problemen bei der Synchronisierung führen wird. Das XtraGrid kann einige Operationen mit der zugrunde liegenden Datenquelle zur gleichen Zeit ausführen, wie Ihr Hintergrund-Thread es ändert. In diesem Fall empfängt das Grid möglicherweise später eine Änderungsbenachrichtigung und versucht, Zeilen aus der Datenquelle zu aktualisieren, die das genannte Problem verursachen. Dieses Problem kann in vielen Fällen auftreten. Wenn ein Benutzer beispielsweise Daten bearbeitet, gruppiert er sie oder das XtraGrid versucht, die Zusammenfassungen neu zu berechnen. Die einzige Lösung für dieses Problem besteht darin, die DataSource-Referenz des Rasters innerhalb eines Hintergrundthreads zu ändern (HINWEIS: Sie müssen es mithilfe der Invoke-Methode implementieren). Anders ausgedrückt, sollten Sie innerhalb eines Hintergrund-Threads mit einer lokalen Kopie der DataSource arbeiten und ihren Klon bei Bedarf an die DataSource des Grids übergeben. Im beigefügten Beispiel finden Sie ein Beispielprojekt, das diesen Ansatz demonstriert.
Ich habe versucht, was es sagte, in dieser resultierenden:
proxyWorker = new Thread(() =>
{
//Clone the datasource into the thread
BindingList<Proxy> newList = new BindingList<Proxy>(proxies);
//Set the proxy source to the cloned datasource in the thread
gcProxies.BeginInvoke(new MethodInvoker(delegate { gcProxies.DataSource = newList; }));
//Logic here
});
proxyWorker.Name = "proxyTester";
proxyWorker.Start();
Es funktioniert, aber was ich nicht verstehe ist, was nach den Fadenenden auf die Datenquelle passiert? Ist nicht newList
zerstört?
Was ich dachte, ist am Ende, dass ich newList es reklonieren und zurück in proxies
(die Original-Datenquelle)
Bitte geben Sie einen Titel, der Ihre Frage zusammenfasst. –
Behoben, sorry, dass vergessen wurde, es richtig einzustellen. – TheGateKeeper