C# 如何在c中使用委托向图表添加值#
我有一个带有两个系列主y轴和次y轴的图表。我想使用委托向图表添加值。添加时,出现“交叉线程操作无效”异常。请参考下面我的代码C# 如何在c中使用委托向图表添加值#,c#,C#,我有一个带有两个系列主y轴和次y轴的图表。我想使用委托向图表添加值。添加时,出现“交叉线程操作无效”异常。请参考下面我的代码 public delegate void SetTextDel(string Xvalue,double Y1value,double Y2Value); Thread Thread1=new Thread(createGraph); private void SetText(string XValue,double Y1Value,
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();
}
替换
this.chart1.Series[0].Points.AddXY(XValue, Y1Value);
this.chart1.Series[1].Points.AddXY(XValue, Y2Value);
如果您的类派生自表单,则使用此选项:
BeginInvoke((Action)(() => {
this.chart1.Series[0].Points.AddXY(XValue, Y1Value);
this.chart1.Series[1].Points.AddXY(XValue, Y2Value);
}));
或者,如果您的类来自页面,则使用此选项:
Dispatcher.BeginInvoke((Action)(() => {
this.chart1.Series[0].Points.AddXY(XValue, Y1Value);
this.chart1.Series[1].Points.AddXY(XValue, Y2Value);
}));
如果
InvokeRequired
为true
,那么您实际上应该调用,请参见答案。我尝试了上面的代码,但显示错误“名称分派器在当前上下文中不存在”。@sowjanyaattaluri您可以显示您的类声明(对于SetText()所属的类)吗?我的类声明为“public partial class Frm_Main:Form”@sowjanyaattaluri很有意义。我更新了答案。我尝试了上面的代码,效果很好。非常感谢。