c#chart 控件极坐标图用addxy添加数据点时界面卡顿

qq_21961911 2015-04-28 08:09:13
如题,在一个线程中循环接收网口的数据x和y,用addxy(x,y)添加数据点,界面卡顿,点击按钮要很久才响应。
请大神指点一下,谢谢!
...全文
705 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
stherix 2016-10-29
  • 打赏
  • 举报
回复
网口来的数据的话 不停的添加肯定会有问题 因为你无法保证网口数据的速度 来得快自然界面就卡 最好是定时去更新
ssss23243 2016-10-28
  • 打赏
  • 举报
回复
加一个form定时器定时刷新图表,能完美解决
redshiliu 2015-04-30
  • 打赏
  • 举报
回复
循环中加个Thread.Sleep(0);
zyc79490433 2015-04-30
  • 打赏
  • 举报
回复
谢谢您的回复,可是英文我实在看不太懂,我是新手,请大神给我指导一下怎么解决这个问题,谢谢!!
zyc79490433 2015-04-30
  • 打赏
  • 举报
回复
谢谢您的回复,可是英文我实在看不太懂,我是新手,请大神给我指导一下怎么解决这个问题,谢谢!!
zyc79490433 2015-04-30
  • 打赏
  • 举报
回复
谢谢您的回复,可是英文我实在看不太懂,我是新手,请大神给我指导一下怎么解决这个问题,谢谢!!
赵4老师 2015-04-29
  • 打赏
  • 举报
回复
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspx
温度采集代码 上位机部分源程序: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, CPort, ExtCtrls, RzBorder, StrUtils, StdCtrls, RzLabel, iComponent, iVCLComponent, iCustomComponent, iPlotComponent, iPlot, RzButton, iPlotChannel, RzPanel, Mask, RzEdit; type TForm1 = class(TForm) iPlot1: TiPlot; RzPanel1: TRzPanel; RzLEDDisplay1: TRzLEDDisplay; RzLabel1: TRzLabel; RzLabel2: TRzLabel; RzPanel2: TRzPanel; RzLabel3: TRzLabel; ComPort1: TComPort; procedure ComPort1RxFlag(Sender: TObject); procedure iplot_init(); procedure FormCreate(Sender: TObject); procedure COMM_init(); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var Form1: TForm1; px:word; implementation {$R *.dfm} //**************************************************************************** //---窗体创建过程--- //**************************************************************************** procedure TForm1.FormCreate(Sender: TObject); begin COMM_init(); // 串口控件的初始化 iplot_init(); // 曲线图的初始化 end; //**************************************************************************** //---串口接收到标志字节产生中断--- //**************************************************************************** procedure TForm1.ComPort1RxFlag(Sender: TObject); var str:string; begin // 以字符串的形式从串口读取数据 ComPort1.ReadStr(str,33); // 去掉数据帧的头和尾直接显示 RzLEDDisplay1.Caption:='+'+MidStr(str,2,5); // 在曲线图上绘一个点 iPlot1.Channel[0].AddXY(px,StrToFloat(RzLEDDisplay1.Caption)); iPlot1.Channel[1].AddXY(px,0); // 跟随绘制0刻度线 iPlot1.Channel[2].AddXY(px,iPlot1.Channel[0].GetYMax); iPlot1.Channel[3].AddXY(px,iPlot1.Channel[0].GetYMin); px:=px+1; end; //**************************************************************************** //---初始化曲线图--- //**************************************************************************** procedure TForm1.iplot_init(); begin iPlot1.RemoveAllChannels; // 移除所有通道 iPlot1.RemoveAllXAxes; // 移除所有X轴 iPlot1.TitleText:='实时温度曲线'; // 设置曲线图的标题 //iPlot1.TitleVisible := False; // 不显示曲线图标题 iPlot1.YAxis[0].Span := 100; // 设置Y轴的显示范围 iPlot1.YAxis[0].Min:=-15; // 设置Y轴的起始值 iPlot1.YAxis[0].Title:='温度值(℃)'; // Y轴名称 iPlot1.YAxis[0].TitleShow:=True; //---配置温度曲线--------------------------------------------------- iPlot1.AddChannel; // 添加一个曲线 iPlot1.Channel[0].TitleText := '温度'; // 设置曲线的名称 iPlot1.Channel[0].Color := clRed; // 设置曲线的颜色 // 曲线插值,加上下面这一句显示的曲线不会有棱角 iPlot1.Channel[0].InterpolationStyle := ipistCubicSpline; iPlot1.Channel[0].TraceLineWidth := 2; // 曲线显示的宽度 iPlot1.AddXAxis; // 添加一个X轴 iPlot1.XAxis[0].Title:='采样时间(S)'; // X轴名称 iPlot1.XAxis[0].TitleShow:=True; iPlot1.XAxis[0].Span := 200; // X轴显示范围 iPlot1.Channel[0].XAxisName := iPlot1.XAxis[0].Name; iPlot1.XAxis[0].LabelsFont.Color := clRed; // 标签字体颜色 //---配置0刻度线--------------------------------------------------- iPlot1.AddChannel; // 添加一个曲线 iPlot1.Channel[1].TitleText := '0刻度'; // 设置曲线的名称 iPlot1.Channel[1].Color := clYellow; // 设置曲线的颜色 iPlot1.Channel[1].TraceLineWidth := 2; // 曲线显示的宽度 iPlot1.Channel[1].XAxisName := iPlot1.XAxis[0].Name; //---配置峰值跟踪显示线--------------------------------------------------- iPlot1.AddChannel; // 添加一个曲线 iPlot1.Channel[2].TitleText := '峰值跟踪'; // 设置曲线的名称 iPlot1.Channel[2].Color := clBlue; // 设置曲线的颜色 iPlot1.Channel[2].TraceLineWidth := 2; // 曲线显示的宽度 iPlot1.Channel[2].XAxisName := iPlot1.XAxis[0].Name; //---配置谷值跟踪显示线--------------------------------------------------- iPlot1.AddChannel; // 添加一个曲线 iPlot1.Channel[3].TitleText := '谷值跟踪'; // 设置曲线的名称 iPlot1.Channel[3].Color := clLime; // 设置曲线的颜色 iPlot1.Channel[3].TraceLineWidth := 2; // 曲线显示的宽度 iPlot1.Channel[3].XAxisName := iPlot1.XAxis[0].Name; end;

110,539

社区成员

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

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

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