调试状态下Windows Service与Timer处理事件的问题

        今天在调试Windows Service的时候遇到了一点麻烦,服务调用的业务处理类中有一段文件
解压缩的处理。在debug状态下,文件解压缩处理老是失败,起初以为是解压缩程序有问题,
经过一步一步的跟踪调试后,发现抛出的错误是被解压缩的文件正在被别的进程使用,
终于找到了错误的位置,定位到错误后着实吓了一身冷汗。服务调用的业务处理进程是通过
Timer事件每5秒钟触发一次的,如果这个进程正在处理,那是不会有第2个相同的进程同时处理,
出现这种问题肯定是有2个相同的进程同时在处理,难道是前面的Timer事件处理的不对。如果
是那样的话应该怎样处理呢?这一系列的问题立马出现在脑海中,在梳理了一下思路后,决定
继续调式查找出真正的原因,谢天谢地最后终于找到了原因。
    我是通过如下语句来判断是否执行业务进程的
 try
 {
  if (readyToProcess)
  {
   readyToProcess = false;
   LaunchProcess();
   currentProcess = null;
   readyToProcess = true;
  }
 }
 catch (Exception ex)
 {
  readyToProcess = true;
  mLog.Error(ex.Message);
 }
 由于业务流程处理复杂,每执行一次可能需要很长时间,在这期间Timer事件被触发了
若干次,在调试状态下就会出现这种情况,本次业务处理流程刚好改变判断标示的值为true,
下一个事件刚好进入,本次业务处理流程刚好还没有全部调试结束或者下一个处理还没有改变
判断标示的值为false,此时如果调式停留的时间过长,下一个Timer事件又被触发并且进入到
了处理流程中,这样就会出现篇头所说的问题。
 或许这是调式时经常遇到的问题,只是之前没有太在意而已。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值