C#Windows服务进程无法访问文件异常,服务在计时器结束后不会被唤醒

时间:2017-02-19 21:36:49

标签: c# windows service timer

我编写了一个简单的服务,它将联系本地MS SQL SERVER数据库并对数据库运行查询,并使用MS SQL SERVER中的数据创建excel和pdf文档。一切正常,我面临两个主要问题。

  1. 异常后服务将无法启动
  2. 服务无法访问excel文件,因为其他进程正在使用它来准备pdf。
  3. 我正在使用System.Timers.Timer,我的代码如下:

        private static System.Timers.Timer _aTimer;
          public ReportManagerService()
                {
    
                    _aTimer = new System.Timers.Timer(10 * 60 * 1000);
    
                    _aTimer.Elapsed += new System.Timers.ElapsedEventHandler(_aTimer_Elapsed);
    
                    _aTimer.AutoReset = false;
    
                    _aTimer.Enabled = true;
                    InitializeComponent();
    
    
    
    
                }
          protected override void OnStart(string[] args)
                {
    
    
                        _aTimer = new System.Timers.Timer(10 * 60 * 1000);//10 minutes   10 * 60 * 1000
                        _aTimer.Elapsed += new System.Timers.ElapsedEventHandler(_aTimer_Elapsed);
    
                        _aTimer.AutoReset = false;
                        _aTimer.Enabled = true;
    
    
                    }
         protected override void OnStop()
                {
    
                        _aTimer.Enabled = false;
                        _aTimer.Stop();
    
                    }
          void _aTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
                {
         try
                    {
                        //_aTimer.AutoReset = false;
                        _aTimer.Stop();
        //huge code which may take more than 10 minutes for execution 
    //get data from sql server
    // export to excel using closedXML
    using (XLWorkbook wb = new XLWorkbook(folderpath))
                        {
    wb.SaveAs(SaveLocationDirectory + "\\" + ReportName + "_" + tempFilename);
    wb.Dispose();
    }
    //export to pdf
    
        }
        catch (Exception ex)
                    {
        }
         finally
                    {
         _aTimer.Start();
    
        }
    
        }
    

    我希望有人让我知道我做错了什么,我相信,发生的事情是计时器在所有代码执行之前重置并且excel工作簿没有正确处理。我可以看到EXCEL.EXE在错误后的进程下运行我的任务管理器。

0 个答案:

没有答案