2017-08-27 63 views
-1

我在我的应用程序中使用了一个System.Windows.Forms.Timer,它触发了向四个LiveCharts添加新数据的方法。间隔设置为1000 ms。它可以像第一个或两个分钟一样正常工作,但间隔变得越来越大,在10分钟后它只会每隔15秒触发一次。 我尝试过使用不同的定时器,没有任何运气。可能是因为应用程序/ LiveCharts的性能太糟糕了,并且由于定时器在UI线程上运行,它必须等待应用程序“准备就绪”?Windows窗体计时器没有按时执行

谢谢!

定时器设置

graphRefreshTimer = new System.Windows.Forms.Timer(); 
graphRefreshTimer.Interval = 1000; 
graphRefreshTimer.Tick += new EventHandler(refreshUI); 
graphRefreshTimer.Start(); 

refreshUI(基本上只添加新ChartValues到LiveCharts。最多需要100毫秒来运行)

//... 
B1VoltageValues.Add(new MeasureModel 
       { 
        DateTime = now, 
        Value = Convert.ToDouble(B1.Voltage)/1000 
       }); 

B1CurrentValues.Add(new MeasureModel 
       { 
        DateTime = now, 
        Value = Convert.ToDouble(B1.Current)/1000 
       }); 

B1ChargingCapacityValues.Add(new MeasureModel 
       { 
        DateTime = now, 
        Value = Convert.ToDouble(B1.getChargeCapIfTrue())/1000 
       }); 

B1DischargingCapacityValues.Add(new MeasureModel 
       { 
        DateTime = now, 
        Value = Convert.ToDouble(B1.getDischargeCapIfTrue())/1000 
       }); 

B1EnergyValues.Add(new MeasureModel 
       { 
        DateTime = now, 
        Value = Convert.ToDouble(B1.Energy)/1000 
       }); 
//... 
+0

请发布代码。 –

+0

是的。如果定时器中的代码花费太长时间,则定时器无法按所需间隔运行。它一次只能运行一个并跳过。 –

+0

我测量了在被触发的方法中执行代码需要多长时间,但从未超过100 ms。 – Luigi04

回答

0

的解决问题的方法是使用LiveCharts 。可以处理更多标准的数据的齿轮箱。使用此软件包后不会再发生用户界面死机。