C# 如何让Windows服务中的主进程在完成时重复

C# 如何让Windows服务中的主进程在完成时重复,c#,.net,service,C#,.net,Service,我希望使用c#创建一个Windows.Net服务,该服务在服务的OnStart事件中调用主进程,当主进程完成时,我希望它再次自动运行,直到我手动停止该服务。主进程可能需要几个小时才能完成,完成的时间也会有所不同,所以我不想使用计时器。它是像将主流程放入while循环一样简单,还是应该有其他一些控制机制 感谢基于@itsme86在其评论中所说,在我的服务OnStart方法中,我添加了一个线程,并在代码中为其分配了一个方法,如下所示 private bool m_isRunning = fa

我希望使用c#创建一个Windows.Net服务,该服务在服务的OnStart事件中调用主进程,当主进程完成时,我希望它再次自动运行,直到我手动停止该服务。主进程可能需要几个小时才能完成,完成的时间也会有所不同,所以我不想使用计时器。它是像将主流程放入while循环一样简单,还是应该有其他一些控制机制


感谢

基于@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的反对票。如果有人可以发表评论解释,我可以避免将来做任何我在问题中做错的事情。谢谢