所以我有一个用C#编写的Windows服务。服务类别从ServiceBase
派生,并分别启动和停止服务调用实例方法OnStart
和OnStop
。下面是类的SSCE:调用ServiceBase.OnStart和OnStop ...相同的实例?
partial class CometService : ServiceBase
{
private Server<Bla> server;
private ManualResetEvent mre;
public CometService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
//starting the server takes a while, but we need to complete quickly
//here so let's spin off a thread so we can return pronto.
new Thread(() =>
{
try
{
server = new Server<Bla>();
}
finally
{
mre.Set()
}
})
{
IsBackground = false
}.Start();
}
protected override void OnStop()
{
//ensure start logic is completed before continuing
mre.WaitOne();
server.Stop();
}
}
可以看出,有相当大量的逻辑的需要,当我们调用OnStop
,我们正在处理的ServiceBase
同一个实例,我们打电话时OnStart
。
我可以肯定这是这种情况吗?
是的,你可以肯定。 – zmbq
把它放在一个带有参考的答案中,我会向你提出要点! – spender
嗯。你确定要做'IsBackground = true'吗?如果你从'OnStart'返回并且只有后台线程正在运行,那么这个进程可能会被关闭 - 所以它只能通过运气/计时(该线程已经向前发展了足够的进程来启动服务器) 。 –