我现在的程序如下:
public void AfterCreatCurve(ZedGraphControl zg)
{
zg.GraphPane.XAxis.Scale.MaxAuto = true;
double x = (double)new XDate(DateTime.Now);
double y = GlobalUser.ran.NextDouble();
double y1 = GlobalUser.ran.NextDouble();
double y2 = GlobalUser.ran.NextDouble();
GlobalUser.list1.Add(x, y);
GlobalUser.list2.Add(x, y1);
GlobalUser.list3.Add(x, y2); if (GlobalUser.list1.Count >= 150)
{ GlobalUser.list1.RemoveAt(0); } if (GlobalUser.list2.Count >= 150)
{ GlobalUser.list2.RemoveAt(0);
} if (GlobalUser.list3.Count >= 150)
{ GlobalUser.list3.RemoveAt(0); } zg.AxisChange();
zg.Refresh(); } private void timer1_Tick(object sender, EventArgs e)
{
for (int i=0; i < 35; i++)
{
AfterCreatCurve(GlobalUser.myZed[i ]);
}
} 其中timer的执行周期设置的是1000ms,即1秒执行一次,程序很简单,但是任务量比较大,在一个周期内我只对1个控件执行该程序时一切正常,可是一旦对36个控件(GlobalUser.myZed[i],i=0...35)执行,运行后程序显示上就会出现问题,横轴(X轴)显示的时间出现偏差,乱跳(我做的是一个实时曲线程序,屏幕上要同时监视30个坐标系,每个坐标系里有3条曲线,横轴是时间,纵轴是数值)。请问这是因为执行任务量大的原因么?有没有好的解决方案呢?
public void AfterCreatCurve(ZedGraphControl zg)
{
zg.GraphPane.XAxis.Scale.MaxAuto = true;
double x = (double)new XDate(DateTime.Now);
double y = GlobalUser.ran.NextDouble();
double y1 = GlobalUser.ran.NextDouble();
double y2 = GlobalUser.ran.NextDouble();
GlobalUser.list1.Add(x, y);
GlobalUser.list2.Add(x, y1);
GlobalUser.list3.Add(x, y2); if (GlobalUser.list1.Count >= 150)
{ GlobalUser.list1.RemoveAt(0); } if (GlobalUser.list2.Count >= 150)
{ GlobalUser.list2.RemoveAt(0);
} if (GlobalUser.list3.Count >= 150)
{ GlobalUser.list3.RemoveAt(0); } zg.AxisChange();
zg.Refresh(); } private void timer1_Tick(object sender, EventArgs e)
{
for (int i=0; i < 35; i++)
{
AfterCreatCurve(GlobalUser.myZed[i ]);
}
} 其中timer的执行周期设置的是1000ms,即1秒执行一次,程序很简单,但是任务量比较大,在一个周期内我只对1个控件执行该程序时一切正常,可是一旦对36个控件(GlobalUser.myZed[i],i=0...35)执行,运行后程序显示上就会出现问题,横轴(X轴)显示的时间出现偏差,乱跳(我做的是一个实时曲线程序,屏幕上要同时监视30个坐标系,每个坐标系里有3条曲线,横轴是时间,纵轴是数值)。请问这是因为执行任务量大的原因么?有没有好的解决方案呢?
例如我在程序里添加多个timer,每个timer对应一个或多个控件可以么?