2013-12-08 119 views
-3

我是一名编程学生,被分配了一个项目,我必须使用一个随机数表示用户选择的测量单位并返回测量值,转换后的测量结果和收集的时间。在C#中,如何创建一个数组,每15秒更新一次

我为定时器设置了一个调度器定时器,间隔为15秒。所以它的工作原理是程序每隔15秒触发一个事件,以公制或英制的形式显示一个随机数,然后显示转换后的数值和时间,当然,计时器以一个开始按钮开始,并显示数据直到按下停止按钮。

我的问题是,我想展示收集的数据的有限历史,但我遇到了数组的麻烦。每次它更改为新数据时,它都会覆盖以前的数据或不添加新数据,具体取决于我如何制定语句。所以当显示到标签时,它只显示当前数据的一行,而不显示任何其他数据。

例如,用户选择“厘米”,程序确定它是度量标准,并使用一个随机数作为与转换值和时间值连接的值。
15秒后触发事件,并显示“厘米”的新随机数。
所以这三个值结合之后(测量,测量转换和时间),我会打电话给dataCollected,我填充数组:

string [] dataHistory = new string[10] 
    for (int i = 0; i < dataHistory.Length; i++) 
    { 
     if (dataHistory[i] == null || dataHistory[i] == "") 
     { 
      dataHistory[i] = dataTlt + "\n"; 
     } 
    } 
    foreach (string c in dataHistory) 
    { 
     collectedLbl.Content = c; 
    } 

不知道我做错了。

回答

0

你的代码片段确实没有提供足够的信息去继续;可能存在多个问题,但您至少有一个问题是您的循环只是在每次迭代中更换标签的内容。这将是更好地使用:

collectedLbl.Content = string.Join(", ", dataHistory); 

(注 - 您不需要foreach本)

目前尚不清楚对我说,你不也因为每个事件更换整个阵列事件处理没有显示,但希望这有助于你进一步。

0
foreach (string c in dataHistory) 
{ 
    collectedLbl.Content = c; 
} 

这里的问题是你设置标签的内容给dataHistory数组中的每个字符串。这不是一项累积操作:每次设置此数据时,都会覆盖标签的内容。如果你想要标签显示所有的数组中,你可以做的值,例如:

collectedLbl.Content = String.Join("\n", dataHistory); 

这将加入阵列中的所有值到一个字符串中的每个元素之间的新线路。

0

您的代码片段不会显示这些是否是单个函数中的所有调用,但似乎您并未重新使用数组,而是在每次迭代中都创建一个新数组。如果您想要存储最后10个事务,则需要在该函数之外初始化该数组。此外,这个循环还是有点缺陷的,因为第11个事务根本不会发布到数组中。 (如果所有10个阵列位置都有数据,则没有办法去除最旧的项目。)

0

在第一次迭代,你的第一个循环,结果存储在dataTlt + "\n"阵列dataHistory所有位置,从不达到10历史上的限制时删除最老的结果。它很容易,如果你只使用一个List<string>而非string[]

List<string> dataHistory = new List<string>(); 

现在更新如下:

dataHistory.Add(dataTlt); 

// remove first result if history has over 10 elements 
if(dataHistory.Count > 10) 
    dataHistory.RemoveAt(0); 
// now, update your label 
collectedLbl.Content = String.Join("\n", dataHistory); 
相关问题