您好,我正在尝试每秒更新我的图表,所有图表应始终同时进行。为了更好地理解,我将包含一个图像,但首先我将解释实际发生的情况。所以我正在发送 ping 请求,每次有结果时,它都会将其写在一个名为 file 的数据点数组中。一切正常,按预期工作。同时,两个计时器正在运行,一个计时器调用一个准备数据的方法(假设在特定时间在数组中找不到数据 -> 它应该只设置值 0)。准备好的数据不是在缓冲区中。第二个计时器正在更新 UI 并从 tempData 读取,但这并没有按预期或希望的那样工作。计时器:myTimer.Interval = 1000;myTimer.Tick += FileReadFunction;aTimer.Elapsed += new System.Timers.ElapsedEventHandler(prepData);aTimer.Interval = 1000;启动计时器的按钮单击:private void _tbStartAll_Click(object sender, EventArgs e) { lock (_hosts) { foreach (HostPinger hp in _hosts) hp.Start(); myTimer.Start(); aTimer.Enabled = true; } }Form类中准备数据的方法: public void prepData(object objectInfo, EventArgs e) { foreach (NetPinger.source.AddGraph b in graphList) { b.prepareData(); } }准备数据方法:public void prepareData() { double unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; for (double i = unixTimestamp; unixTimestamp - graphSizing < i; i--) { bool exists; try { exists = Array.Exists(file, element => element.XValue == i); exists = true; } catch { exists = false; } try { if (exists == false) { TempBuffer = TempBuffer.Skip(1).Concat(new DataPoint[] { new DataPoint(i, 0) }).ToArray(); } else { DataPoint point = Array.Find(file, element => element.XValue == i); TempBuffer = TempBuffer.Skip(1).Concat(new DataPoint[] { (point) }).ToArray(); }
1 回答
倚天杖
TA贡献1828条经验 获得超3个赞
我通过稍微更改代码解决了这个问题。为了保持同步,我首先准备数据,然后再显示它。数据准备好后,所有数据都会显示出来。此外,我现在只使用一个计时器而不是两个。
- 1 回答
- 0 关注
- 181 浏览
添加回答
举报
0/150
提交
取消