我有一个Windows服务,可以在OnStart(string[] args)
上触发一个帖子。此主线程创建了其他线程。安装并启动服务后,当我尝试停止服务时,我无法在第一次尝试时停止服务。当我右键点击我的服务并请求“停止”时。我得到以下异常,服务仍在运行。
Windows无法在本地计算机上停止该服务。该服务没有返回错误。这可能是内部Windows错误或内部服务错误。 如果问题仍然存在,请与系统管理员联系。
当我再次尝试停止时,我最终会收到其他消息
Windows无法在本地计算机上停止服务 错误1061:此时服务无法接受控制消息。
但服务已停止。所以我正在点击右键 - >停止,两次停止服务。
我试图中止线程并停止服务,但没有收获。
protected override void OnStop()
{
onStartThread.Abort();
Log.AuditEventLogger("Service Stopped");
this.Stop();
}
我非常感谢任何建议。谢谢。
答案 0 :(得分:3)
首先,您呼叫this.Stop
,然后再次调用OnStop
方法。你有一个无限循环,所以你的服务没有停止。
其次,不要像这样中止你的线程。告知他们要停止,例如使用等待句柄(ManualResetEvent
)并加入线程。如果您正在使用任务,请使用CancellationToken
。
答案 1 :(得分:0)
根据评论中的代码片段,我建议您将线程作为后台线程。默认情况下,我相信它将是一个前台线程,所以如果它很忙,将阻止你的proecess终止。
有关详细信息,请参阅MSDN。
然而,由于你没有在问题中提供大量细节,因此可能还有其他因素在起作用。
答案 2 :(得分:0)
onStartThread.Abort();
不一定总是中止线程。 当调用Abort方法来销毁线程时,公共语言运行库会抛出ThreadAbortException。无法保证线程永远不会结束。如果要等到中止的线程结束,可以调用Thread.Join方法。 Join是一个阻塞调用,在线程实际停止执行之前不会返回。