我遇到了我正在處理的管理應用程序的問題。我構建了一個停止,啓動和查詢40多臺服務器上的各種服務的界面。Service.Controller狀態/輪詢
我正在查看service.controller並已成功停止並啓動各種按鈕事件服務,但現在我試圖找出一種方法將服務狀態返回到文本框並查詢服務狀態每10秒鐘左右一次,我覺得自己正在撞牆。
有沒有人有任何提示或見解?
謝謝!
我遇到了我正在處理的管理應用程序的問題。我構建了一個停止,啓動和查詢40多臺服務器上的各種服務的界面。Service.Controller狀態/輪詢
我正在查看service.controller並已成功停止並啓動各種按鈕事件服務,但現在我試圖找出一種方法將服務狀態返回到文本框並查詢服務狀態每10秒鐘左右一次,我覺得自己正在撞牆。
有沒有人有任何提示或見解?
謝謝!
您可以使用Timer對象觸發定期服務檢查。您可以在Elapsed事件上運行您的服務查詢。
private void t_Elapsed(object sender, ElapsedEventArgs e)
{
// Check service statuses
}
至於在文本框中顯示狀態,你應該能夠使用該服務狀態ToString()方法,並顯示在一個常規的文本框中。請記住,在對定時器事件作出反應時,您可能會或可能不會在GUI線程中,因此您需要調用自己的主線程。
private delegate void TextUpdateHandler(string updatedText);
private void UpdateServerStatuses(string statuses)
{
if (this.InvokeRequired)
{
TextUpdateHandler update = new TextUpdateHandler(this.UpdateServerStatuses);
this.BeginInvoke(update, statuses);
}
else
{
// load textbox here
}
}
也許你不希望輪詢:
Private serviceController As ServiceController = Nothing
Private serviceControllerStatusRunning = False
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Try
serviceController = New ServiceController("NameOfTheTheServiceYouWant")
If serviceController.Status = ServiceControllerStatus.Stopped Then
' put code for stopped status here
Else
' put code for running status here
End If
BackgroundWorker1.RunWorkerAsync()
Catch ex As Exception
MessageBox.Show("error:" + ex.Message)
serviceController = Nothing
Me.Close()
Exit Sub
End Try
End Sub
Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
If serviceControllerStatusRunning Then
serviceController.WaitForStatus(ServiceControllerStatus.Stopped)
serviceControllerStatusRunning = False
Else
serviceController.WaitForStatus(ServiceControllerStatus.Running)
serviceControllerStatusRunning = True
End If
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As System.Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
if serviceControllerStatusRunning then
' put code for running status here
else
' put code for stopped status here
end if
BackgroundWorker1.RunWorkerAsync() ' start worker thread again
End Sub
乾杯 孕育