我编写了一个简单的服务,它将联系本地MS SQL SERVER数据库并对数据库运行查询,并使用MS SQL SERVER中的数据创建excel和pdf文档。一切正常,我面临两个主要问题。
我正在使用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在错误后的进程下运行我的任务管理器。