VS2005开发windows服务的注意事项

来源:互联网 发布:淘宝仓库中的宝贝 编辑:程序博客网 时间:2024/05/05 05:23

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        组件设计器生成的代码
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
原创粉丝点击