Update C# Chart using BackgroundWorker

Posted by Mark on Stack Overflow See other posts from Stack Overflow or by Mark
Published on 2011-01-13T09:44:05Z Indexed on 2011/01/13 9:54 UTC
Read the original article Hit count: 290

I am currently trying to update a chart which is on my form to the background worker using:

bwCharter.RunWorkerAsync(chart1);

Which runs:

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;
}

However, at the point of clearing the series, an exception is thrown.

Basically, I want to do a whole lot more processing after clearing the series, which slows the GUI down completely - so wanted this in another thread.

I thought that by passing it as an argument, I should be safe, but apparently not!

Interestingly, the chart is on a tab page. I can run this over and over if the tabpage is in the background, but if I run this, look at the chart, hide it again, and re-run, it throws the exception. Obviously, it throws if the chart is in the foreground as well.

Can anyone suggest what I can do differently?

Thanks!

© Stack Overflow or respective owner

Related posts about c#

Related posts about multithreading