所以我有一個用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'返回並且只有後臺線程正在運行,那麼這個進程可能會被關閉 - 所以它只能通過運氣/計時(該線程已經向前發展了足夠的進程來啓動服務器) 。 –