Update C# - Diagramm mithilfe der BackgroundWorker-Klasse

Ich bin derzeit versucht, zu aktualisieren ein Diagramm, das auf meinem Formular in den hintergrund Arbeiter mit:

bwCharter.RunWorkerAsync(chart1);

Läuft:

private void bcCharter_DoWork(object sender, DoWorkEventArgs e)
{
     System.Windows.Forms.DataVisualization.Charting.Chart chart = null;

     //Convert e.Argument to chart
     //..
     //Converted..

     chart.Series.Clear();
     e.Result=chart;

     setChart(c.chart);
}
private void setChart(System.Windows.Forms.DataVisualization.Charting.Chart arg)
{
     if (chart1.InvokeRequired)
     {
         chart1.Invoke(new MethodInvoker(delegate { setChart(arg); }));
         return;
     }

     chart1 = arg;
}

Jedoch an dem Punkt des Löschens der Serie, wird eine Ausnahme geworfen.

Im Grunde, ich will nicht eine ganze Menge mehr Verarbeitung nach der Befreiung von der Serie, die verlangsamt die GUI komplett ab - so wollte das in einem anderen thread.

Dachte ich, dass durch die übergabe als argument, wie ich sein sollte sicher, aber anscheinend nicht!

Interessant, das Diagramm ist auf einer Registerkarte. Ich kann laufen, diese über und über, wenn die tabpage in den hintergrund, aber wenn ich diesen starte, schauen Sie auf den chart, verstecken Sie es wieder, und erneut ausführen, es wirft die Ausnahme. Natürlich wirft es, wenn sich das Diagramm in den Vordergrund als gut.

Kann jeder jeden schlagen, was ich anders machen kann?

Dank!


BEARBEITEN:
Ich weiß, dass dies getan werden kann in der form thread, als wenn ich aufgebe, es wieder zurück. Aber der springende Punkt, der mit einem hintergrund-Arbeiter ist zu vermeiden, zu Schleifen, das ganze Programm halt. Wie ich schon sagte, es ist viel mehr die Verarbeitung, als nur diesen einen Befehl.

Bin ich davon ausgegangen, dass die übergabe als argument, das mir erlauben würde, es in diesem thread ungehindert, aber gibt es eine chance, dass diese weitergegeben chart noch Punkte zurück zu der ursprünglichen Grafik in irgendeiner Weise? Wenn ja, wie können diese überwunden werden?

Ich soll das blockieren der GUI-thread so wenig wie möglich - so scheint es keinen Punkt in die aufrufen jeden Befehl.

InformationsquelleAutor Mark | 2011-01-13
Schreibe einen Kommentar