VS2005开发windows服务的注意事项

来源:互联网 发布:java获取302源码 编辑:程序博客网 时间:2024/05/18 19:46

VS2005开发windows服务的注意事项

http://blog.csdn.net/shaily/archive/2009/02/20/3912473.aspx

 

1、Timer控件失效的解决
在Windows 服务不引发计时器事件
原因:
我认为windows服务里不能使用System.Windows.Forms的Timer控件,Windows.Forms 计时器组件用于 Windows.Forms 环境。 WindowsForms 计时器组件不用于服务器环境,所以要使用System.Timer下的控件。

解决方案
这个可以通过修改控件的类型,把所有使用服务器计时器从命名空间 System.Timers 代替 System.Windows.Forms 计时器。注意System.Timers的事件是Elapsed事件

如:
Service1.Designer.cs


 1namespace MyNewService
 2{
 3    partial class MyNewService
 4    {
 5        /**//// <summary>
 6        /// 必需的设计器变量。
 7        /// </summary>
 8        private System.ComponentModel.IContainer components = null;
 9
10        /**//// <summary>
11        /// 清理所有正在使用的资源。
12        /// </summary>
13        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
14        protected override void Dispose(bool disposing)
15        {
16            if (disposing && (components != null))
17            {
18                components.Dispose();
19            }
20            base.Dispose(disposing);
21        }
22
23        组件设计器生成的代码#region 组件设计器生成的代码
24
25        /**//// <summary>
26        /// 设计器支持所需的方法 - 不要
27        /// 使用代码编辑器修改此方法的内容。
28        /// </summary>
29        private void InitializeComponent()
30        {
31            this.eventLog1 = new System.Diagnostics.EventLog();
32            this.timer1 = new System.Timers.Timer();
33            ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).BeginInit();
34            ((System.ComponentModel.ISupportInitialize)(this.timer1)).BeginInit();
35            //
36            // timer1
37            //
38            this.timer1.Interval = 2000;
39            this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);
40            //
41            // MyNewService
42            //
43            this.CanPauseAndContinue = true;
44            this.CanShutdown = true;
45            this.ServiceName = "MyNewService";
46            ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit();
47            ((System.ComponentModel.ISupportInitialize)(this.timer1)).EndInit();
48
49        }
50
51        #endregion
52
53        private System.Diagnostics.EventLog eventLog1;
54        private System.Timers.Timer timer1;
55
56    }
57}
Service1.cs:

 1using System;
 2using System.Collections.Generic;
 3using System.ComponentModel;
 4using System.Data;
 5using System.Diagnostics;
 6using System.ServiceProcess;
 7using System.Text;
 8
 9namespace MyNewService
10{
11    public partial class MyNewService : ServiceBase
12    {
13        public MyNewService()
14        {
15            InitializeComponent();
16            if (!System.Diagnostics.EventLog.SourceExists("MySource"))
17            {
18                System.Diagnostics.EventLog.CreateEventSource(
19                    "MySource", "MyNewLog");
20            }
21            eventLog1.Source = "MySource";
22            eventLog1.Log = "MyNewLog";
23        }
24
25        protected override void OnStart(string[] args)
26        {
27            eventLog1.WriteEntry("In OnStart");
28            this.timer1.Enabled = true;
29           
30
31        }
32
33        protected override void OnStop()
34        {
35            eventLog1.WriteEntry("In onStop.");
36            this.timer1.Enabled = false;
37        }
38
39        protected override void OnContinue()
40        {
41            eventLog1.WriteEntry("In OnContinue.");
42        }
43
44     
45
46        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
47        {
48            eventLog1.WriteEntry("timer1_Tick." + DateTime.Now.ToString());
49        } 
50
51
52    }
53}
54

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shaily/archive/2009/02/20/3912473.aspx

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shaily/archive/2009/02/20/3912473.aspx

原创粉丝点击