2008-11-14 3 views
3

내가 관리하고있는 관리 응용 프로그램에 문제가 있습니다. 40 개 정도의 서버에서 다양한 서비스를 중지하고 시작하고 쿼리 할 수있는 인터페이스를 구축하고 있습니다.Service.Controller 상태/폴링

service.controller를보고 버튼 이벤트로 다양한 서비스를 중지하고 시작했지만 이제 서비스 상태를 텍스트 상자 및 서비스 상태로 반환하는 방법을 알아 내려고합니다. 매 10 초 정도 지나면 벽돌 벽을 때리는 것처럼 느껴집니다.

팁이나 통찰력이있는 사람이 있습니까?

감사합니다.

답변

4

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 
     } 
    } 
2

어쩌면 당신은 폴링하고 싶지 않은 :

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 

건배 이

를 진화