簡體   English   中英

Windows Service +從數據庫讀取

[英]Windows Service + read from database

我是Windows服務的新用戶。 我需要Windows服務,該服務從數據庫的表中讀取條目。 我有一個CONSOLE APP,在其中添加了新項目WINDOWS SERVICE。 我已經有一個訪問數據庫的方法和其他方法。 我可以將一個線程放在讀取數據庫的啟動位置。 我將線程放在哪里? ( 我怎樣才能做到這一點)。 我在WINDOWS SERVICE的哪里添加這些方法? 我有這樣的Windows服務:

public Service1()
{
   InitializeComponent();
}

protected override void OnStart(string[] args)
{
   do
   {
      thread.start();
      bool variab = readFromDatabase (Database table);
   }
}

protected override void OnStop()
{
}

我建議您創建一個類,在其中您需要做的一切並在服務中創建:

public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        YourClass cl = new YourClass();
        cl.DoWhatYouNeed(...);       
    }

    protected override void OnStop()
    {
    }

這使您有機會獨立於服務運行和測試您的類,可能是在調試發布期間。

對於Windows服務,通常會在一個單獨的線程中創建一個方法來執行服務的主循環。 否則,該服務可能無法響應。 例如,您可以使用一種稱為MainLoop的方法來執行服務邏輯。 僅使用OnStart方法執行初始化任務,例如讀取配置值或啟動服務的線程。 並使用OnStop執行清潔任務,停止線程等...

Thread _workerThread;
bool _shouldStop;

public Service1()
{
  InitializeComponent();
}    

protected override void OnStart(string[] args)
{
   try{
   _workerThread = new Thread(new ThreadStart(MainLoop));
   _shouldStop = false;
   _workerThread.Start();
   }
   catch{}
}

private void MainLoop()
{
   while (!_shouldStop)
   {
      try{
      //your logic here
      }
      catch{}
   }
}

protected override void OnStop()
{
   _shouldStop = true;
}

您必須將包含數據訪問邏輯的代碼或類放在OnStart方法中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM