gpt4 book ai didi

c# - 如何从线程中停止 Windows 服务应用程序?

转载 作者:太空狗 更新时间:2023-10-29 18:28:30 26 4
gpt4 key购买 nike

我有一个在 OnStart 方法中启动线程的 Windows 服务。

基本上我希望能够在出现问题时停止服务(比如未处理的异常)。

目前我正在使用 ServiceBase.Stop() 但这涉及到在某个线程可见的地方有一个 ServiceBase 实例,这又涉及将我的实例声明为public static 在主程序中。

是否有任何“更好的方法”来停止服务?如果不是……这样做安全吗?

最佳答案

在我看来,最简单也是最干净的方法是使用服务类的公共(public)静态属性。唯一不起作用的情况是您使用相同的服务类在同一进程中运行多个服务,这种情况非常罕见。

private static MyService m_ServiceInstance;

public static MyService ServiceInstance
{
get { return m_ServiceInstance; }
}

public MyService()
{
InitializeComponents();
//Other initialization
m_ServiceInstance = this;
}

将服务实例注入(inject)每个可能需要它的方法是一种替代方法,但它很快就会变得困惑,并且与仅使用静态属性相比并没有真正的优势。

关于c# - 如何从线程中停止 Windows 服务应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/587077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com