提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|其它|编辑:郝浩|2012-10-19 15:55:35.000|阅读 576 次
概述:实际应用中,我们可能会遇到需要实时的显示某一些数据的情况,比如心电图、CPU当前使用率或者内存使用率等等,在Silverlight有一个Timer组件可以轻松的做到这一点,本文将做一定的介绍
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
在实际应用中,我们可能会遇到需要实时的显示某一些数据的情况,比如心电图、CPU当前使用率或者内存使用率等等。在Visifire Silverlight有一个Timer组件可以轻松的做到这一点,该组件可以每隔一段时间就调用一次需要处理的函数,在此这个函数中通过WebService,WCF等获取到相应的值,然后更新UI上的图表控件,以达到实时更新数据的作用。
现在我们来看看Timer组件的使用思路:
首先将现有的UI线程赋值出来,并且初始化Timer组件Timer timer=Timer(TimerCallback, Object, Int32, Int32) 这里有4个参数。
第一个参数是需要处理的函数的委托
第二个参数是需要带入处理函数的参数对象
第三个参数是从创建Timer对象到Timer对象执行委托函数的时间间隔
第四个参数是每隔多少毫秒执行一次委托函数
然后再委托函数中我们获取到当前的需要显示的数据值,调用UI线程显示到图表中(在本实例中我们使用Random.Next(100)的随机数来模拟数据源)。在数据显示过程中我们可以通过调用timer.Change(int32,int32)来重置Timer启动时间和处理委托函数的间隔时间,也可以通过调用timer.Disponse()方法来释放Timer组件对象。
本实例中为了让节面显得更加的美观大方,我们初始化了30个值50的点,然后在每调用Timer委托的函数中每在最后添加一个点,就将最前面的点减去。下面我们看项目的实例源码:
/// <summary> /// 创建一个图表 /// </summary> /// <param name="tableName">表名字</param> /// <param name="updateTime">时间段的集合</param> /// <param name="value">对应时间段集合的值</param> /// <param name="row">本表在主Grid里面的ROW值</param> /// <param name="column">本表在主Grid里面的column值</param> /// <param name="rihgtStr">Y轴的后缀</param> /// <param name="tspan">时间段间隔</param> /// <param name="chartInterval">图表两点之间的间隔</param> /// <param name="intervaltype">图表的X轴坐标按什么来分类,如时分秒</param> public void CreateChart(string tableName, int row, int column, string rihgtStr, TimeSpan tspan, int chartInterval, IntervalTypes intervaltype) { // 创建一个图标 Chart chart = new Chart(); // 设置图标的宽度和高度 chart.Width = 500; chart.Height = 400; chart.ToolBarEnabled = true; // 设置图标的属性 chart.ScrollingEnabled = false; chart.View3D = true; // 创建一个标题的对象 Title title = new Title(); // 设置标题的名称 title.Text = tableName; title.Padding = new Thickness(0, 10, 5, 0); // 向图标添加标题 chart.Titles.Add(title); // 初始化一个新的Axis Axis xAxis = new Axis(); // 设置axis的属性 //图表的X轴坐标按什么来分类,如时分秒 xAxis.IntervalType = intervaltype; //图表中的X轴坐标间隔如2,3,20等,单位为xAxis.IntervalType设置的时分秒。 xAxis.Interval = chartInterval; //设置X轴的时间显示格式为7-10 11:20 xAxis.ValueFormatString = "hh:mm:ss"; //给图标添加Axis chart.AxesX.Add(xAxis); Axis yAxis = new Axis(); //设置图标中Y轴的最小值永远为0 yAxis.AxisMinimum = 0; //设置图表中Y轴的后缀 yAxis.Suffix = rihgtStr; chart.AxesY.Add(yAxis); // 创建一个新的数据线。 DataSeries dataSeries = new DataSeries(); // 设置数据线的格式。 dataSeries.RenderAs = RenderAs.Line; dataSeries.XValueType = ChartValueTypes.DateTime; // 添加数据线到数据序列。 chart.Series.Add(dataSeries); //将生产的图表增加到Grid,然后通过Grid添加到上层Grid. Grid gr = new Grid(); gr.Children.Add(chart); Grid.SetRow(gr, row); Grid.SetColumn(gr, column); gr.Margin = new Thickness(5); gr.VerticalAlignment = VerticalAlignment.Top; gr.HorizontalAlignment = HorizontalAlignment.Left; //增加一个遮罩层到gr,将visifire的水印遮掉。 StackPanel sp = new StackPanel(); sp.Width = 160; sp.Height = 18; sp.Margin = new Thickness(0, 3, 6, 0); sp.VerticalAlignment = VerticalAlignment.Top; sp.HorizontalAlignment = HorizontalAlignment.Right; sp.Background = new SolidColorBrush(Colors.White); gr.Children.Add(sp); LayoutRoot.Children.Add(gr); //初始化30个DataPoint点,这些点都是50的值,一个平滑的曲线,目的在于让后续点的出现不会太唐突导致不美观。 int s = 30; for (int n = 0; n < 30; n++) { DataPoint dpoint = new DataPoint(); dpoint.XValue = new DateTime(2010, 2, 15, 6, s+n, 03); Random rom = new Random(); dpoint.YValue = 50.0; chart.Series[0].DataPoints.Add(dpoint); } //将当前的UI进程赋给thread;以供下面使用 thread = System.Threading.SynchronizationContext.Current; //启动Timer组件,开始增加DataPoint点 time = new Timer(AddPoint, chart, 1000, 1000); } //时间标志,不用关注 int TimeFlag = 0; Timer time; System.Threading.SynchronizationContext thread; public void AddPoint(object state) { //UI线程更新内容 thread.Post(delegate { Chart chart = state as Chart; DataPoint dpoint = new DataPoint(); dpoint.XValue = new DateTime(2010, 2, 15, 7, TimeFlag, 03); //获取到随机数 Random rom = new Random(); int num= rom.Next(100); dpoint.YValue = double.Parse(num.ToString()); chart.Series[0].DataPoints.Add(dpoint); //设置每增加了一个点,就将最前面的那个点去掉。 chart.Series[0].DataPoints.Remove(chart.Series[0].DataPoints[0]); TimeFlag++; }, null); //此处我们设置标志等于59的时候取消Timer的运行 if (TimeFlag == 59) { time.Dispose(); } }
本实例只模拟了59个点,如有需要稍微修改一下逻辑即可。VS2010+Silverlight 4.0的开发环境,下面请看效果图如下:
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:博客园面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
Visifire Silverlight是基于Silverlight的数据可视化控件套包
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢