C# 如何让Windows服务中的主进程在完成时重复
我希望使用c#创建一个Windows.Net服务,该服务在服务的OnStart事件中调用主进程,当主进程完成时,我希望它再次自动运行,直到我手动停止该服务。主进程可能需要几个小时才能完成,完成的时间也会有所不同,所以我不想使用计时器。它是像将主流程放入while循环一样简单,还是应该有其他一些控制机制C# 如何让Windows服务中的主进程在完成时重复,c#,.net,service,C#,.net,Service,我希望使用c#创建一个Windows.Net服务,该服务在服务的OnStart事件中调用主进程,当主进程完成时,我希望它再次自动运行,直到我手动停止该服务。主进程可能需要几个小时才能完成,完成的时间也会有所不同,所以我不想使用计时器。它是像将主流程放入while循环一样简单,还是应该有其他一些控制机制 感谢基于@itsme86在其评论中所说,在我的服务OnStart方法中,我添加了一个线程,并在代码中为其分配了一个方法,如下所示 private bool m_isRunning = fa
感谢基于@itsme86在其评论中所说,在我的服务OnStart方法中,我添加了一个线程,并在代码中为其分配了一个方法,如下所示
private bool m_isRunning = false;
Thread m_thread;
protected override void OnStart(string[] args)
{
try
{
m_thread = new Thread(StartService);
m_thread.Start();
m_isRunning = true;
}
catch (Exception ex)
{
if (m_logger != null)
{
m_logger.Error(ex, "An exception has occurred in the OnStart method call");
}
throw new Exception(ex.Message);
}
}
在我的OnStop方法中,我添加了以下代码
protected override void OnStop()
{
try
{
m_isRunning = false;
m_logger.Information("Application stopped.");
m_thread = null;
}
catch (Exception ex)
{
if (m_logger != null)
{
m_logger.Error(ex, "An exception has occurred in the OnStop method call");
}
throw new Exception(ex.Message);
}
}
然后在StartService方法中设置循环,如下所示
private void StartService()
{
try
{
InitializeLogger();
m_logger.Information("Application started.");
while (m_isRunning)
{
RunProcess();
}
}
catch (Exception ex)
{
if (m_logger != null)
{
m_logger.Error(ex, "An exception has occurred in the StartService method call");
}
throw new Exception(ex.Message);
}
}
RunProcess方法执行服务职责,当它完成时,由于StartService方法中的while循环,它将再次激发
这一切似乎都像我希望的那样工作。将要重复的代码放入循环中有什么不对?至少在看不到代码结构的情况下很难判断。你只是想确保OnStart()能及时返回。我很好奇为什么我投了-3的反对票。如果有人可以发表评论解释,我可以避免将来做任何我在问题中做错的事情。谢谢