我有一个包含两个系列主要和次要y轴的图表。我想使用委托给图表添加值。当我添加时,得到"交叉线程操作无效"例外。请参考下面的代码。
public delegate void SetTextDel(string Xvalue,double Y1value,double
Y2Value);
Thread Thread1=new Thread(createGraph);
private void SetText(string XValue,double Y1Value,double Y2Value)
{
if (this.chart1.InvokeRequired)
{
this.chart1.Series[0].Points.AddXY(XValue, Y1Value);
this.chart1.Series[1].Points.AddXY(XValue, Y2Value);
}
}
private void createGraph()
{
while(true)
{
string time;
int Y1value =0;
int Y2value =0;
time="abc";
Y1value = 10;
Y2value = 20;
SetTextDel = new SetTextDel(SetText);
SetText(time,oilvalue,tempvalue);
Y1value +=5;
Y2value +=5;
}
}
private void startbtn_Click(object sender, EventArgs e)
{
Thread1.Start();
}
答案 0 :(得分:4)
替换
this.chart1.Series[0].Points.AddXY(XValue, Y1Value);
this.chart1.Series[1].Points.AddXY(XValue, Y2Value);
如果您的类派生自Form:
BeginInvoke((Action)(() => {
this.chart1.Series[0].Points.AddXY(XValue, Y1Value);
this.chart1.Series[1].Points.AddXY(XValue, Y2Value);
}));
或者如果您的类派生自Page:
Dispatcher.BeginInvoke((Action)(() => {
this.chart1.Series[0].Points.AddXY(XValue, Y1Value);
this.chart1.Series[1].Points.AddXY(XValue, Y2Value);
}));