Windows Service开发日志一(Win服务的一些技巧与出错处理)

 最近要帮朋友做一个即时发送邮件的系统,由于功能单一而且要长期执行,所以我想起用Windows服务的方式处理,同时也可以学习一下相关知识.在开发中遇到的问题和处理方法,我都记录在其中,希望能帮助有相同困难要处理的朋友.

一.Windows服务中的时钟问题.

要在服务中实现定时询问,一般有两种做法,其一是用时钟定时执行,其二是用线程,如果用时钟来处理的话就要注意了,从工具箱中取出的控件默认都是继承于类System.Windows.Forms.Timer,但这种控件在服务中是不会被执行的,如果要在服务中用,一定要用继承于类System.Timers.Timer的控件才行,

如果你想保持用可视化的方式来开发,你可以打开服务对应的设计文件(举例,服务文件名叫AlarmService,那么就打开AlarmService.Desinger.cs),将里面的System.Windows.Forms.Timer改为System.Timers.Timer(注意,有两个地方要改),保存后,你双击服务中的Timer控件就会发现创建的事件已经不同了,但其它地方大致还是一样的.

你也可以用代码同态创建,然后定义一个方法,再将方法绑到对象的Elapsed事件中,代码如下

Timer Timer1=new Timer()

protected override void OnStart(string[] args)
{
     Timer1.Elapsed +=this.timer1_Elapsed;       //动态绑定事件
}

private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    //中间省略
}

即可

 二.创建好服务好启动服务时出错,提示#1083

由于我同一个项目中创建了两个服务,但C#很笨,我装服务改名时,他不会为新的服务重新创建一个新的对象,举例:我创建一个Windows服务项目时,系统会自动创建一个叫SendTWMail的服务,如果我装其它文件重命名为SendXMMail后,打开Program.cs发现里面创建的服务对象还是Service1,要手工进行修改,不然注册服务后运行就会报1083,还有一点,同一项目如果创建了两个或以上服务时,新创建的服务系统也不会为其创建对象,也是要手工在Program.cs文件中添加,否则启动服务时也会报1083错

语法如下:

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
   { 
    new SendTWMail(),new SendXMMail()    //假设两个服务的名分别为SendTWMail和SendXMMail
   };
ServiceBase.Run(ServicesToRun);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值