0
我得到一個服務控制器爲我服務的一個:ServiceControllerStatus沒有給我目前的狀態
foreach (ServiceController sc in ServiceController.GetServices())
{
if (sc.ServiceName == ConfigurationManager.SYNC_SERVICE_NAME)
{
this._serviceController = sc;
break;
}
}
,然後調用就可以了狀態功能,當用戶觸發動作:
private void tsmiStartServer_Click(object sender, EventArgs e)
{
if (_serviceController.Status == ServiceControllerStatus.Stopped)
this._serviceController.Start();
}
但是,即使服務停止,狀態也會顯示爲正在運行。事實上,狀態似乎並沒有改變,導致我認爲它在我得到服務控制器對象的時候被檢測和緩存。
但是,我發現如果我在調用Status屬性之前先執行Refresh()調用,它將檢測到服務的正確狀態。這似乎與doco關於調用「獲取此實例引用的服務的狀態」的內容相矛盾。除非我不再以某種方式引用正確的實例... ??
正如我在這個問題的最後一段說,這樣做「工作」,但似乎打敗目的有一個狀態屬性是爲了給我的服務的狀態,而不是狀態的緩存版本?如果這是有道理的......我也檢查了多個地方的狀態,似乎很多代碼重複。 – Joe 2010-09-24 07:29:55
@Joe:對不起,我錯過了那部分。但我完全同意你的看法。該文件令人困惑。關於在多個地方檢查狀態:這聽起來像是有一些重構的空間。您可以輕鬆地提供一個靜態方法來封裝此行爲,這將減少代碼重複。 – 2010-09-24 07:34:49
我對讓身份不清爽的設計決定感到非常震驚。如果我想要一個緩存,我會將它緩存在我自己的代碼中(天知道爲什麼我想首先緩存過時的狀態)。接受失敗的答案。 –
Joe
2010-09-24 08:16:34