我有一个Windows服务,在OnStart方法中启动一个线程.
基本上我希望能够在出现问题时停止服务(如未处理的异常).
目前我正在使用ServiceBase.Stop()
但涉及ServiceBase
在线程可见的某个实例,这反过来涉及将我的实例声明为public static
在主程序中.
是否有任何"更好的方法"来停止服务?如果不是......这样做是否安全?
最简单的,在我看来,最干净的方法是使用服务类的公共静态属性.唯一一次不起作用的是,如果您使用相同的服务类在同一个进程中运行多个服务,这是非常罕见的.
private static MyService m_ServiceInstance; public static MyService ServiceInstance { get { return m_ServiceInstance; } } public MyService() { InitializeComponents(); //Other initialization m_ServiceInstance = this; }
将服务实例注入到可能需要它的每个方法中是一种替代方法,但它很快就会变得混乱,并且与仅使用静态属性相比没有任何真正的优势.