每次C#中的计时器滴答时如何将元素添加到arrayList?

时间:2014-12-16 19:54:16

标签: c# arraylist timer

我有一种方法,每次计时器滴答时间隔(间隔:2s)生成一个随机数

public static double RandomNumber(double min, double max)
{
  lock (synk)
  {
    return random.NextDouble() * (max - min) + min;
  }
}

我希望将随机方法中的值添加到数组列表中,例如:

ArrayList list = new ArrayList();
list.Add(RandomNumber(double min, double max))
double totalSum = Sum(list);

Sum()方法是:

private double Sum(ArrayList arr)
{
  double sum = 0;

  foreach (double i in arr)
  {
    sum = sum + i;
  }

  return sum;
}

但是当我检查列表的内容(在textBox中)时,每次只添加最后一个值时都会添加它。我无法将所有值添加到列表中。任何帮助将不胜感激,并提前感谢您。

1 个答案:

答案 0 :(得分:1)

虽然我还没有看到完整的代码,但问题是,每次定时器调用您的方法时,您都会创建ArrayList。您应该在函数外部创建列表,以便保留值。

其次,最好使用List<T>作为列表容器,因为它是强类型的,并且对您需要的操作具有LINQ支持(除非您使用旧版本。 NET版本)(正如Peter Duniho指出的那样,您甚至不需要整个列表?)。

考虑到以上几点,您的代码应如下所示:

private readonly List<double> _list = new List<double>(); 
//created and initialized outside of your function
public void CaylledByTimer()
{
   _list.Add(RandomNumber(min, max));
   double totalSum = _list.Sum(); //you can use built-in LINQ Sum function
}