如何使用c#中的委托向图表添加值

时间:2016-01-04 14:29:45

标签: c#

我有一个包含两个系列主要和次要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();
   }

1 个答案:

答案 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);  
         }));