OK, bitte ignorieren Sie, was vorher gegangen ist. Ich bekomme die Fehler nicht mehr, daher scheint mein Problem darin zu bestehen, ein Diagramm zu aktualisieren, wenn ich die Werte ändere, an die das Diagramm gebunden ist.Control.Refresh() über Threads
// Disregard unten hier
Hallo alle. Ich habe eine WinForms-Anwendung, die ein Panel hat, panel1
. Ein Hintergrund-Thread erstellt einige andere Steuerelemente, die dann wie
panel1
hinzukommen
panel1.Controls.AddRange(myArrayOfControls);
Dies funktioniert gut und ich kann meine Kontrollen zu sehen bekommen hinzugefügt. Wenn jedoch neue Daten in einem anderen Thread eingehen, aktualisiere ich die Werte in den übergeordneten Objekten der Steuerelemente und benötige dann Refresh()
, damit die Anzeige mit den neuen Werten aktualisiert wird. Wenn Sie in einem der beiden Kontexte Refresh()
aufrufen, verursacht der Thread, in dem die Daten eingehen, oder die Objekte, die die aktualisierten Daten empfangen, eine InvalidOperation-Ausnahme, da Invoke erforderlich ist. Ich habe versucht, Invoke in meinen Modellobjekten und auch in dem Thread zu verwenden, in dem die Daten eingehen, und scheint den Fehler nicht zu erschüttern.
Wenn jemand eine Anleitung hat, würde ich es sehr schätzen.
UPDATE: Hier ist ein wenig mehr Info. Ich dachte nicht, dass es das erfordern würde, aber ich lag falsch. :)
Ich habe eine Objektklasse MyObject. Diese MyObject-Klasse wird in einem Thread namens topologyThread erstellt. Daten kommen auf dataThread. Instanzen von MyObject verfügen über eine Panel-Instanzvariable, und das Panel verfügt über untergeordnete Steuerelemente einschließlich zweier Diagramme aus dem System.Windows.Forms.DataVisualization.Charting-Namespace. Wenn Daten in dataThread eingehen, aktualisiere ich die entsprechenden Datenwerte in den MyObject-Objekten und muss dann die Diagramme aktualisieren, um die aktualisierten Daten anzuzeigen.
Ich weiß, dass die Daten in Ordnung sind. In meiner MyObject-Klasse protokolliere ich die neuen Werte in Console im Setter für die Eigenschaft und sehe, wie die neuen Werte angezeigt werden.
+1, jetzt bist du 10 Wiederholungen näher dran zu kommentieren. :) –