silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了25.Silverlight多线程技术Timer的应用,模拟心电图、模拟CPU、内存状态图大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

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

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

        首先将现有的UI线程赋值出来,并且初始化Timer组件Timer  timer=Timer(TimerCallBACk,Object,Int32,Int32) 这里有4个参数。

              ●第@L_197_2@参数是需要处理的函数的委托

              ●第二个参数是需要带入处理函数的参数对象

              ●第三个参数是从创建Timer对象到Timer对象执行委托函数的时间间隔

              ●第四个参数是每隔多少毫秒执行一次委托函数

        然后再委托函数中我们获取到当前的需要显示的数据值,调用UI线程显示到图表中(在本实例中我们使用Random.Next(100)的随机数来模拟数据 源)。在数显示过程中我们可以通过调用timer.Change(int32,int32)来重置Timer启动时间和处理委托函数的间隔时间,也可以 通过调用timer.Disponse()方法来释放Timer组件对象。
        本实例中为了让节面显得更加的美观大方,我们初始化了30个值50的点,然后在每调用Timer委托的函数中每在最后添加@L_197_2@点,就将最前面的点减去。下面我们看项目的实例源码(注:本实例基于Visifire图表开发,且源码基于14.Visifire图表控件的使用一(图表的创建和基础使用)的基础上制作,如有疑问请看第十四节)

 

  
  
  1. /// <sumMary
  2. /// 创建@L_197_2@图表 
  3. /// </sumMary
  4. /// <param name="tablename">表名字</param> 
  5. /// <param name="updatetiR_262_11845@e">时间段的集合</param> 
  6. /// <param name="value">对应时间段集合的值</param> 
  7. /// <param name="row">本表在主Grid里面的ROW值</param> 
  8. /// <param name="@R_944_8620@n">本表在主Grid里面的@R_944_8620@n值</param> 
  9. /// <param name="rihgtStr">Y轴的后缀</param> 
  10. /// <param name="tspan">时间段间隔</param> 
  11. /// <param name="charTinterval">图表两点之间的间隔</param> 
  12. /// <param name="intervaltype">图表的X轴坐标按什么来分类,如时分秒</param> 
  13. public void CreateChart(String tableName, int row, int @R_944_8620@nString rihgtStr, TimeSpan tspan, int charTinterval, IntervalTypes intervaltypE) 
  14. { 
  15. // 创建@L_197_2@图标 
  16. Chart chart = new Chart(); 
  17.  
  18. // 设置图标的宽度和高度 
  19. chart.Width = 500; 
  20. chart.Height = 400; 
  21. chart.ToolBarEnabled = true
  22.  
  23. // 设置图标的属性 
  24. chart.ScrollingEnabled = false
  25. chart.View3D = true
  26.  
  27. // 创建@L_197_2@标题的对象 
  28. titltitle = new title(); 
  29.  
  30. // 设置标题名称 
  31. title.Text = tableName; 
  32. title.Padding = new Thick@R_801_11335@s(0, 10, 5, 0); 
  33.  
  34. // 向图标添加标题 
  35. chart.titles.Add(titlE)
  36.  
  37. // 初始化@L_197_2@新的Axis 
  38. Axis xAxis = new Axis(); 
  39.  
  40. // 设置axis的属性 
  41. //图表的X轴坐标按什么来分类,如时分秒 
  42. xAxis.IntervalType = intervaltype; 
  43. //图表中的X轴坐标间隔如2,3,20等,单位为xAxis.IntervalType设置的时分秒。 
  44. xAxis.Interval = charTinterval; 
  45. //设置X轴的时间显示格式为7-10 11:20 
  46. xAxis.ValueFormatString = "hh:mm:ss"
  47. //给图标添加Axis 
  48. chart.AxesX.Add(xAxis); 
  49. Axis yAxis = new Axis(); 
  50. //设置图标中Y轴的最小值永远为0 
  51. yAxis.AxisMinimum = 0; 
  52. //设置图表中Y轴的后缀 
  53. yAxis.Suffix = rihgtStr; 
  54. chart.AxesY.Add(yAxis); 
  55. // 创建@L_197_2@新的数据线。 
  56. DataSeries dataSeries = new DataSeries(); 
  57.  
  58. // 设置数据线的格式。 
  59. dataSeries.RenderAs = renderAs.Line; 
  60. dataSeries.XValueType = ChartValueTypes.datetiR_262_11845@e; 
  61.  
  62. // 添加数据线到数据序列。 
  63. chart.Series.Add(dataSeries); 
  64.  
  65. //将生产的图表增加到Grid,然后通过Grid添加到上层Grid. 
  66. Grid gr = new Grid(); 
  67. gr.Children.Add(chart); 
  68. Grid.SetRow(gr, row); 
  69. Grid.Set@R_944_8620@n(gr, @R_944_8620@n); 
  70. gr.Margin = new Thick@R_801_11335@s(5); 
  71. gr.VerticalAlignment = VerticalAlignment.Top
  72. gr.HorizontalAlignment = HorizontalAlignment.Left
  73. //增加@L_197_2@遮罩层到gr,将visifire的水印遮掉。 
  74. StackPanel sp = new StackPanel(); 
  75. sp.Width = 160; 
  76. sp.Height = 18; 
  77. sp.Margin = new Thick@R_801_11335@s(0, 3, 6, 0); 
  78. sp.VerticalAlignment = VerticalAlignment.Top
  79. sp.HorizontalAlignment = HorizontalAlignment.Right
  80. sp.BACkground = new SolidColorBrush(Colors.WhitE)
  81. gr.Children.Add(sp)
  82. LayoutRoot.Children.Add(gr); 
  83. //初始化30个DataPoint点,这些点都是50的值,@L_197_2@平滑的曲线,目的在于让后续点的出现不会太唐突导致不美观。 
  84. int s = 30
  85. for (int n = 0; n < 30; n++) 
  86. { 
  87. DataPoint dpoint = new DataPoint(); 
  88. dpoint.XValue = new datetiR_262_11845@e(2010, 2, 15, s+n, 03); 
  89. Random rom = new random(); 
  90. dpoint.YValue = 50.0; 
  91. chart.Series[0].DataPoints.Add(dpoint)
  92. //将当前的UI进程赋给thread;以供下面使用 
  93. thread = System.Threading.SynchronizationContext.Current
  94. //启动Timer组件,开始增加DataPoint点 
  95. time = new Timer(AddPoint, chart, 1000, 1000); 
  96. //时间标志,不用关注 
  97. int TimeFlag = 0; 
  98. Timer time
  99. System.Threading.SynchronizationContext thread; 
  100. public void AddPoint(object statE) 
  101. { 
  102. //UI线程更新内容 
  103. thread.Post(delegate 
  104. { 
  105. Chart chart = state as Chart; 
  106. DataPoint dpoint = new DataPoint(); 
  107. dpoint.XValue = new datetiR_262_11845@e(2010, 7, TimeFlag, 03); 
  108. //获取随机数 
  109. Random rom = new random(); 
  110. int num= rom.Next(100); 
  111. dpoint.YValue = double.Parse(num.ToString()); 
  112. chart.Series[0].DataPoints.Add(dpoint)
  113. //设置每增加了@L_197_2@点,就将最前面的那个点去掉。 
  114. chart.Series[0].DataPoints.Remove(chart.Series[0].DataPoints[0]); 
  115. TimeFlag++; 
  116. }, null); 
  117.  
  118. //此处我们设置标志等于59的时候取消Timer的运行 
  119. if (TimeFlag == 59) 
  120. { 
  121. time.Dispose(); 

        本实例只模拟了59个点,如有需要稍微修改一下逻辑即可。VS2010+Silverlight 4.0的开发环境,如需源码请点击  SLTimerForCPU.zip 下载。下面请看效果图如下:

@L_674_62@

                            【第三秒的图片

@L_674_62@

【第九秒的图片

@L_674_62@

 【第十九秒的图片

@L_674_62@

【第二十五秒的图片

@H_939_801@

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。