Windows服务+从数据库中读取

时间:2011-09-29 07:32:52

标签: c# database windows-services database-schema

我是新手到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()
{
}

3 个答案:

答案 0 :(得分:2)

我建议您创建一个类,在其中您可以执行所需的一切并在服务中创建:

public Service1()
    {
        InitializeComponent();
    }

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

    protected override void OnStop()
    {
    }

这使您有机会在调试版本期间运行和测试您的类与服务分开。

答案 1 :(得分:1)

对于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;
}

答案 2 :(得分:0)

您必须将包含数据访问逻辑的代码或类放在OnStart方法