c#无法停止windows服务

c#无法停止windows服务,c#,multithreading,windows-services,C#,Multithreading,Windows Services,我有一个Windows服务,它在OnStart(string[]args)上触发一个线程。此主线程还创建了其他线程。安装并启动服务后,当我尝试停止服务时,我无法在第一次尝试时停止服务。当我右键单击我的服务并请求“停止”时。我得到下面的异常,服务仍在运行 Windows无法停止本地计算机上的服务。服务没有返回错误。这可能是内部windows错误或内部服务错误。 如果问题仍然存在,请与系统管理员联系 当我再次试图阻止它时,我最终得到了另一条消息 Windows无法停止本地计算机上的服务。 错误106

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

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

当我再次试图阻止它时,我最终得到了另一条消息

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

但服务已停止。因此,我执行右键单击->停止,两次停止服务

我试图中止线程并停止服务,如下所示,但没有任何收获

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

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

首先,您正在调用
此方法。停止
,它将再次调用您的
OnStop
方法。您有一个无限循环,因此您的服务不会停止


其次,不要像这样中止线程。发出停止信号,例如使用等待手柄(
ManualResetEvent
)并连接线程。如果您使用的是任务,那么根据注释中的代码片段,使用
取消标记

,我建议将您的线程设置为后台线程。默认情况下,我相信它将是一个前台线程,因此如果它很忙,将停止进程终止

有关更多详细信息,请参阅

然而,由于你没有在问题中提供太多的细节,很可能还有其他因素在起作用

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

出于兴趣,如何启动线程?是背景线吗?如果没有,您可能需要将其设置为一个-查看其他问题是否对您有帮助:受保护的覆盖void OnStart(字符串[]args){onStartThread=new Thread(()=>DataFeedScheduler.Start());onStartThread.Priority=ThreadPriority.Normal;onStartThread.Start();}这就是我做错的。我试过ServiceController停止和这个。停止,两者都不起作用。一旦我拆下停止()按钮,它就会正常工作。谢谢