簡單問題,求解釋
我新建了一個Windows服務項目::向文本文件中一分鐘寫一條記錄。
方法1:
用system.Timer實現此功能,相關代碼如下:
public Service1()
{
InitializeComponent();
System.Timers.Timer timer1 = new System.Timers.Timer(1000);
timer1.Enabled = true;
timer1.AutoReset = true;//是執行一次還是一直執行
timer1.Enabled = true;//
timer1.Elapsed += new System.Timers.ElapsedEventHandler(TimeElapse);
}
public void TimeElapse(object obj, System.Timers.ElapsedEventArgs e)
{
WriteLog();//功能實現方法
}
方法2:
用無線循環實現此功能,相關代碼如下:
public Service1()
{
InitializeComponent();
while(true)
{
WriteLog();//功能實現方法
Thread.Sleep(1000);
}
}
我用方法1能安裝此服務並能啟動服務運行:每分鐘會寫進一條數據。
但是按照方法2去做,能安裝此服務,但是不能啟動該服務,會報錯誤1053....而且也會向文本文件中寫進一條數據。
我的問題是:
1.為什麼方法2會出現那樣的問題?
2.用循環可以實現這個功能嗎?
------解决方案--------------------方法2不行,因为Windows服务是这样的,它要求调用构造函数启动它后在一定时间内必须返回。你把死循环写在构造函数中,Windows会认为服务启动有问题,一直无法启动,就强行关闭了。
所以你应该开一个新的线程跑服务,而构造函数将这个线程开出来,就立刻返回。