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

Jor*_*oba 8 .net c# multithreading windows-services

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

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

目前我正在使用ServiceBase.Stop()但涉及ServiceBase在线程可见的某个实例,这反过来涉及将我的实例声明为public static在主程序中.

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

Ste*_*tin 10

最简单的,在我看来,最干净的方法是使用服务类的公共静态属性.唯一一次不起作用的是,如果您使用相同的服务类在同一个进程中运行多个服务,这是非常罕见的.

private static MyService m_ServiceInstance;

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

public MyService()
{
    InitializeComponents();
    //Other initialization
    m_ServiceInstance = this;
}
Run Code Online (Sandbox Code Playgroud)

将服务实例注入到可能需要它的每个方法中是一种替代方法,但它很快就会变得混乱,并且与仅使用静态属性相比没有任何真正的优势.