日期:2014-05-17  浏览次数:20764 次

簡單問題,求解釋
我新建了一個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会认为服务启动有问题,一直无法启动,就强行关闭了。

所以你应该开一个新的线程跑服务,而构造函数将这个线程开出来,就立刻返回。