25.Silverlight多线程技术Timer的应用,模拟心电图、模拟CPU、内存状态图

25.Silverlight多线程技术Timer的应用,模拟心电图、模拟CPU、内存状态图,第1张

概述        在实际应用中,我们可能会遇到需要实时的显示某一些数据的情况,比如心电图、CPU当前使用率或者内存使用率等等。在Silverlight有一个 Timer组件可以轻松的做到这一点,该组件可以每隔一段时间就调用一次需要处理的函数,在此这个函数中通过WebService,WCF等获取到相应的 值,然后更新UI上的图表控件,以达到实时更新数据的作用。         现在我们来看看Timer

        在实际应用中,我们可能会遇到需要实时的显示某一些数据的情况,比如心电图、cpu当前使用率或者内存使用率等等。在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委托的函数中每在最后添加一个点,就将最前面的点减去。下面我们看项目的实例源码(注:本实例基于Visifire图表开发,且源码基于14.Visifire图表控件的使用一(图表的创建和基础使用)的基础上制作,如有疑问请看第十四节)

 

    /// <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, 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, 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的开发环境,如需源码请点击  SLTimerForCPU.zip 下载。下面请看效果图如下:

                            【第三秒的图片】

【第九秒的图片】

 【第十九秒的图片】

【第二十五秒的图片】

总结

以上是内存溢出为你收集整理的25.Silverlight多线程技术Timer的应用,模拟心电图、模拟CPU、内存状态图全部内容,希望文章能够帮你解决25.Silverlight多线程技术Timer的应用,模拟心电图、模拟CPU、内存状态图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1078942.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存