c#无法停止Windows服务

时间:2014-06-05 09:30:47

标签: c# multithreading windows-services

我有一个Windows服务,可以在OnStart(string[] args)上触发一个帖子。此主线程创建了其他线程。安装并启动服务后,当我尝试停止服务时,我无法在第一次尝试时停止服务。当我右键点击我的服务并请求“停止”时。我得到以下异常,服务仍在运行。

  

Windows无法在本地计算机上停止该服务。该服务没有返回错误。这可能是内部Windows错误或内部服务错误。   如果问题仍然存在,请与系统管理员联系。

当我再次尝试停止时,我最终会收到其他消息

  

Windows无法在本地计算机上停止服务   错误1061:此时服务无法接受控制消息。

但服务已停止。所以我正在点击右键 - >停止,两次停止服务。

我试图中止线程并停止服务,但没有收获。

protected override void OnStop()
{
    onStartThread.Abort();
    Log.AuditEventLogger("Service Stopped");
    this.Stop();
}

我非常感谢任何建议。谢谢。

3 个答案:

答案 0 :(得分:3)

首先,您呼叫this.Stop,然后再次调用OnStop方法。你有一个无限循环,所以你的服务没有停止。

其次,不要像这样中止你的线程。告知他们要停止,例如使用等待句柄(ManualResetEvent)并加入线程。如果您正在使用任务,请使用CancellationToken

答案 1 :(得分:0)

根据评论中的代码片段,我建议您将线程作为后台线程。默认情况下,我相信它将是一个前台线程,所以如果它很忙,将阻止你的proecess终止。

有关详细信息,请参阅MSDN

然而,由于你没有在问题中提供大量细节,因此可能还有其他因素在起作用。

答案 2 :(得分:0)

onStartThread.Abort(); 

不一定总是中止线程。 当调用Abort方法来销毁线程时,公共语言运行库会抛出ThreadAbortException。无法保证线程永远不会结束。如果要等到中止的线程结束,可以调用Thread.Join方法。 Join是一个阻塞调用,在线程实际停止执行之前不会返回。