2013-03-11 78 views
2

我確定這是一個非常常見的情況,但我無法在MSDN上找到有關它的信息。在.net窗口服務中處理停止

比方說,我有一個執行事務的服務,當我得到一個停止請求時,我想確保在實際過程終止之前完成了當前事務。

我知道Windows似乎有一個「停止」狀態,但我不知道如何控制從ServiceBase.OnStop方法。

我是否希望在註冊停止請求後立即從OnStop返回?如果是這樣,我該如何表明什麼時候我真的完成了?

或者,我應該阻止並不是從OnStop返回,直到當前事務完成? (即,Windows自動將服務置於OnStop調用和OnStop返回之間的「停止」狀態)

回答

1

如果您有某種線程正在執行事務,則應等待它完成(或取消,您的決定)在OnStop。如果OnStop返回,應該停止該服務,而不僅僅是標記爲停止或類似的東西。

+0

此外,「OnStop」方法有一個超時(默認30秒)。如果該方法在那段時間沒有完成執行,則停止服務被中止。 – 2013-03-11 10:27:01

+1

謝謝你們 - 看起來我這麼多年來一直在做錯:-)在這裏也發現了一篇優秀的文章http://blogs.msdn.com/b/bclteam/archive/2009/02/19/in-depth看起來像.Net團隊做了很好的工作,從SCM交互的細節中抽象出我們;他們的工作流程如圖1所示。這是框架文檔沒有描述的恥辱 – Andy 2013-03-11 10:47:37