为了账号安全,请及时绑定邮箱和手机立即绑定

C# WinForms 试图保持时间线同步

C# WinForms 试图保持时间线同步

C#
红颜莎娜 2021-06-30 16:01:12
您好,我正在尝试每秒更新我的图表,所有图表应始终同时进行。为了更好地理解,我将包含一个图像,但首先我将解释实际发生的情况。所以我正在发送 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个赞

我通过稍微更改代码解决了这个问题。为了保持同步,我首先准备数据,然后再显示它。数据准备好后,所有数据都会显示出来。此外,我现在只使用一个计时器而不是两个。


查看完整回答
反对 回复 2021-07-10
  • 1 回答
  • 0 关注
  • 181 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信