2011-05-13 46 views
15

我想了解OnStart()之間構造一個ServiceBase派生類的差異。從閱讀周圍看來,第一次啓動服務(在打開機器後),構造函數被調用。此後,您可以根據需要多次停止和啓動該服務,但構造函數將不會再次被調用,每次只會調用OnStart()方法。有人可以確認嗎?C#服務 - 的OnStart()V構造

感謝

+0

是的,我可以證實。這完全合乎邏輯。 – 2011-05-13 19:53:42

+0

謝謝你提出這個問題。 – alvonellos 2014-07-03 15:51:32

回答

15

不要使用構造函數進行處理,應在OnStart。使用OnStart來處理您的服務的所有初始化。構造函數在應用程序的可執行文件運行時調用,而不是在服務運行時調用。該可執行文件在OnStart之前運行。例如,如果繼續,則不會再次調用構造函數,因爲SCM已將該對象保存在內存中。如果在構造分配OnStop釋放資源,而不是OnStart,所需的資源,不會再次創造了第二次服務調用。 MSDN

+0

謝謝。只是想確認我的理解。爲我的70-536學習。 – Ronnie 2011-05-13 21:37:29

+2

因此,如果我有一個服務,並需要,例如,初始化一個事件處理程序,我想這樣做onStart?或否,因爲它會初始化處理程序上的多個實例? – 2011-10-21 19:54:03

+0

如果您訂閱了OnStart上的活動,則應取消OnStop中的活動。 – johnw182 2014-07-07 19:32:47

2

是的,這是正確的。每個負載調用一次構造函數,當用戶(或自動化)啓動和停止服務時,可能會發生啓動。

4

稍加改變是,它取決於它是否包含一個服務或多個服務。下面是來自docs

行如果可執行文件包含單個 服務,系統調用 服務的構造方法時開始是 從SCM選擇,並運行 析構函數,如果停止被調用。

如果可執行文件包含多個 ,呼叫中心開始對一個服務 導致施工人員在可執行文件被稱爲 爲大家服務, 但只有指定的服務是 啓動。當所有服務 已經停止,沒有單獨 當每個服務停止服務 析構函數一起運行。

但oxilumin的答案可能是你追求的。