В настоящее время я пытаюсь обновить диаграмму, которая находится в моей форме, для фонового работника, используя:
bwCharter.RunWorkerAsync(chart1);
, который работает:
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;
}
Однако в точке очисткисерия, исключение.
По сути, я хочу сделать намного больше обработки после очистки серии, что полностью замедляет работу графического интерфейса - поэтому хотел это в другом потоке.
Я подумал, что, передав его в качестве аргумента, я должен быть в безопасности, но, видимо, нет!
Интересно, что диаграмма находится на закладке.Я могу запускать это снова и снова, если вкладка находится в фоновом режиме, но если я запускаю это, смотрю на график, скрываю его снова и снова запускаю, выдает исключение.Очевидно, он выдает, если диаграмма также находится на переднем плане.
Кто-нибудь может подсказать, что я могу сделать по-другому?
Спасибо!
РЕДАКТИРОВАТЬ: Я знаючто это можно сделать в потоке формы, как при повторном назначении.Однако весь смысл использования фонового работника состоит в том, чтобы избежать остановки всей программы.Как я уже сказал, обработка намного больше, чем просто одна команда.
Я предполагал, что передача его в качестве аргумента позволит мне беспрепятственно получить доступ к нему в этом потоке, но есть ли шанс, что эта переданная диаграммавсе еще указывает на исходный график каким-то образом?Если так, как это можно преодолеть?
Я хочу как можно меньше блокировать поток графического интерфейса пользователя, поэтому нет смысла просто вызывать каждую команду.