如何使一个界面上两个zedGraph收到数据 都实时的刷新 不卡死

有时想起 2017-01-17 09:54:33
示例代码如下所示: 现在屏蔽掉一个zedgraph刷新的话 刷新可用 不然的话 就会卡死界面

private void Form1_Load(object sender, EventArgs e)
{
initZedGraph(zedGraphControl1);
Task task = new Task(new Action(sampling));
task.Start();
}
private PointPairList list1 = new PointPairList(); //AD1的点
private PointPairList list2 = new PointPairList(); //AD2的点
private PointPairList list3 = new PointPairList();
private PointPairList list4 = new PointPairList(); //AD1的点
private PointPairList list5 = new PointPairList(); //AD2的点
private PointPairList list6 = new PointPairList();
private void initZedGraph(ZedGraphControl zedgraph)
{
GraphPane myPane = zedgraph.GraphPane;
if (zedgraph == zedGraphControl1)
{
myPane.Title.Text = "1";
LineItem Curve1 = myPane.AddCurve("电压1", list1, Color.Yellow, SymbolType.None);
LineItem Curve2 = myPane.AddCurve("电压2", list2, Color.Green, SymbolType.None);
LineItem Curve3 = myPane.AddCurve("电压3", list3, Color.Red, SymbolType.None);

Curve1.IsY2Axis = true;
Curve2.IsY2Axis = true;
}
if (zedgraph == zedGraphControl2)
{
myPane.Title.Text = "2";
LineItem Curve1 = myPane.AddCurve("电压1", list4, Color.Yellow, SymbolType.None);
LineItem Curve2 = myPane.AddCurve("电压2", list5, Color.Green, SymbolType.None);
LineItem Curve3 = myPane.AddCurve("电压3", list6, Color.Red, SymbolType.None);

Curve1.IsY2Axis = true;
Curve2.IsY2Axis = true;
}
myPane.XAxis.Title.Text = "时间";
myPane.YAxis.Title.Text = "距离(μm)";//"电压值"; //
myPane.XAxis.Scale.Max = 100;
myPane.XAxis.Scale.Min = 0;
myPane.XAxis.MajorTic.IsOpposite = false;
myPane.XAxis.MinorTic.IsOpposite = false;
myPane.YAxis.Scale.Max = 3500;
myPane.YAxis.Scale.Min = -3500;
myPane.YAxis.MajorTic.IsOpposite = false;
myPane.YAxis.MinorTic.IsOpposite = false; //小刻度
myPane.YAxis.Scale.Align = AlignP.Inside;

myPane.Y2Axis.Title.Text = "电压值";
myPane.Y2Axis.Scale.Max = 4;
myPane.Y2Axis.Scale.Min = -4;
myPane.Y2Axis.Scale.FontSpec.FontColor = Color.Black;
myPane.Y2Axis.Title.FontSpec.FontColor = Color.Black;
myPane.Y2Axis.MajorTic.IsOpposite = false;
myPane.Y2Axis.MinorTic.IsOpposite = false;
myPane.Y2Axis.Scale.Align = AlignP.Inside;
myPane.Y2Axis.IsVisible = true;
myPane.Chart.Fill = new Fill(Color.White, Color.SteelBlue, 45.0F);
myPane.Legend.IsVisible = false;

zedgraph.AxisChange();
zedgraph.Refresh();
}
int count = 0;
private void sampling()
{
int itime = 0;
while (true)
{


Random rd = new Random();  //无参即为使用系统时钟为种子

list1.Add((double)itime, rd.Next(1,4));
list2.Add((double)itime, rd.Next(1, 4));
list4.Add((double)itime, rd.Next(1, 4));
list5.Add((double)itime, rd.Next(1, 4));
list3.Add((double)itime, rd.Next(1, 4000));
list6.Add((double)itime, rd.Next(1, 4000));


count++;
if (count == 200)
{
count = 0;
itime++;
if (itime > 10000)
{
itime = 0;
list1.Clear();
list2.Clear();
list4.Clear();
list5.Clear();
list3.Clear();
list6.Clear();
}
//Thread.Sleep(100);
if (itime >= 100)
{
zedGraphControl1.GraphPane.XAxis.Scale.Min = (double)itime - 100;
zedGraphControl1.GraphPane.XAxis.Scale.Max = (double)itime;
RefreshGraph(zedGraphControl1);
zedGraphControl2.GraphPane.XAxis.Scale.Min = (double)itime - 100;
zedGraphControl2.GraphPane.XAxis.Scale.Max = (double)itime;
RefreshGraph(zedGraphControl2);
}
}
}
}
private delegate void RefreshDelegate();
private void RefreshGraph(ZedGraphControl zg)
{
if (zg == null)
return;
//判断是否是非创建控件的线程调用控件
if (zg.InvokeRequired)
{
RefreshDelegate a = new RefreshDelegate(new Action(() => { zg.Invalidate(); }));
zg.BeginInvoke(a);
}
else
{
zg.AxisChange();
zg.Invalidate();
zg.Refresh();
}
}
...全文
251 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
有时想起 2017-01-18
  • 打赏
  • 举报
回复
求解。。。。。。。。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧