2014-02-13 24 views
1

我正在尝试使用C#Chart对象来构建数据点的图表。对于数组中的每个数据点,我想绘制图表上的点,并在添加点时使条“增长”。因此,当我生成1000个随机数时,我想在图表上设置1,000个点,每个点从零开始,每次增加1个值。在试图做到这一点时,我注意到图表只是一次构建所有,而不是增加每个点并“增长”这些条。任何关于如何使酒吧变成动画的建议?我知道图表是一个图像,所以我不介意每次重绘,但我甚至不知道如何做到这一点。C#构建图表动画

这里是我的代码示例:

for (int i = 1; i <= numberOfRolls; i++) 
{ 
    int number = randomNumber(); 
    myNumberDictionary[number] += 1; 

    foreach (var point in MyChart.Series["MySeries"].Points) 
    { 
     point.SetValueXY(Convert.ToInt32(point.XValue), myNumberDictionary[Convert.ToInt32(point.XValue)]); 
    } 
} 

有什么建议?

+0

'对于添加到图表中的每个数据点,我想将该点添加到图表中 - 该句子没有意义。 – Tarec

+0

无法编辑:每次迭代你正在使用随机元素的“myNumberArray”(无论它做什么)并将其值增加1.然后在内部foreach循环中将每个点的“Y”位置设置为正确的“卷”列表元素。那些做什么? – Tarec

+0

对不起。修复。本质上,我想每次绘制点,并绘制一个新的图表,每次绘制一个点。 –

回答

0

如果您在UI线程上执行您的任务,绘图将等到您的任务完成。要在添加新点时刷新图表(UI),您需要在单独的线程中执行此操作。

下面是如何实现它的一个例子。

for (int i = 1; i <= numberOfRolls; i++) 
{ 
    int number = randomNumber(); 
    myNumberDictionary[number] += 1; 

    foreach (var point in MyChart.Series["MySeries"].Points) 
    { 
      var startNew = Task.Factory.StartNew(() => 
      { 
       Invoke(new Action(() => 
        point.SetValueXY(Convert.ToInt32(point.XValue), 
        myNumberDictionary[Convert.ToInt32(point.XValue)]); 
      }); 
    } 
}