我是新手到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()
{
}
答案 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方法
中