• 在VS2005 中使用的计时器(Timer)的困惑.


      最近为了实现一个自动更新服务,决定用windows 服务,每隔一定时间,自动轮询服务上的组件是否有更新,如果有更新,则自动下载更新。这一部分没有什么难度,根据向导模板,创建一个windows service 项目,系统会自动生成一个Service1.cs的文件,双击打开该文件,然后再从“工具栏”-->“组件”下,拖一个Timer 控件到文件中,如图所示:

      

          然后定义Timer的Interval属性和Tick 事件,编译、安装,正准备庆祝胜利的时候,结果不如所愿,问题出来了:Tick 事件不执行。检查来检查去,没什么问题啊,郁闷......

      google,baidu 了一下,创建windows service 的文章铺天盖地,可是都是这样介绍的啊,没有特别说明的地方啊,为什么就不执行呢?最后在Service1.Designer.cs 文件中,发现了这样一个信息:

           #region 

            
    /// <summary> 
            
    /// 
            
    /// 
            
    /// </summary>
            private void InitializeComponent()
            {
                
    this.components = new System.ComponentModel.Container();
                
    this.timer1 = new System.Windows.Forms.Timer(this.components);
                
    // 
                
    // Service1
                
    // 
                this.ServiceName = "Service1";

            }

            
    #endregion

            
    private System.Windows.Forms.Timer timer1;

    private System.Windows.Forms.Timer timer1;为什么是 System.Windows.Forms.Timer呢,在service 中,应该不能运行Windows.Forms啊,问题可能就出在这里了,Find Help ,原来还有一个Timer :System.Timers.Timer ,手工修改Service1.Designer.cs文件,把Tick事件 变为Elapsed事件,重新编译、安装,成功了,一个小小的东西,竟折腾了我一个多小时,个中滋味,真难以表达啊。

      总结:

      在Visual Studio 中提供了三种类型的Timer:

         System.Windows.Forms.Timer    基于windows 的计时器,运行于Windows 窗体程序中。

         System.Timers.Timer       基于服务的计时器,运行于服务器环境中。

         System.Threading.Timer     基于线程的计时器,使用回调方法而不是使用事件,并由线程池线程提供支持。

          在Visual Studio 2003的工具箱里面默认提供了System.Windows.Forms.Timer和System.Timers.Timer两种,而Visual Studio 2005 或者2008中却只默认提供了System.Windows.Forms.Timer这一种,所以在vs 2005或者VS2008的windows service 中使用计时器时,必须手工修计时器定义,计时器才能正常运行。

  • 相关阅读:
    【English】20190522
    06_Intent和IntentFilter
    05_Content Provider
    04_ Broadcast Receiver
    03_Service的绑定
    02_启动和销毁Service
    01_Activity生命周期及传递数据
    Android对应版本号
    如何在word中插入代码
    项目经验总结
  • 原文地址:https://www.cnblogs.com/invinboy/p/1255950.html
Copyright © 2020-2023  润新知