服务窗口中的方法OnStop如何延迟?

时间:2019-03-13 13:12:30

标签: c# windows service

我有一个Windows服务,该服务正在使用API​​,该API每次启动时都会将数据发送到API,并且在禁用该服务时,需要将此信息用于API。我使用的是Thread,但是它不遵守确定的时间,因此它没有时间向它发送有关该服务已针对API停止的信息。

我该如何延迟服务停止并让数据有时间到达API?

protected override void OnStart(string[] args)
    {
        _writeFile.Log("Foi iniciado o serviço");

        _shutdownEvent = new ManualResetEvent(false);
        _thread = new Thread(async () => await ControlSendHistorico());
        _thread.Start();

        base.OnStart(args);
    }

    protected override void OnStop()
    {
        if (_stopping) return;
        try
        {
            _stopping = true;
            _shutdownEvent.Set();
            //_shutdownEvent.WaitOne(30000);
            _thread.Join(30000);


            _writeFile.Log("O serviço foi parado");
            base.OnStop();
        }
        catch (Exception e)
        {
            _writeFile.Log("Falha ao parar o serviço " + e.Message);
        }
        finally
        {
            _stopping = false;
        }
    }

1 个答案:

答案 0 :(得分:0)

我使用“ Thread.Sleep();”解决了该问题。 它确实锁定了服务的主线程,而不像我以前那样锁定中间线程。

protected override void OnStop()
{
    if (_stopping) return;
    try
    {
        _stopping = true;
        _shutdownEvent.Set();
        Thread.Sleep(500);

        _writeFile.Log("O serviço foi parado");
        base.OnStop();
    }
    catch (Exception e)
    {
        _writeFile.Log("Falha ao parar o serviço " + e.Message);
    }
    finally
    {
        _stopping = false;
    }
}