Service.Controller Status / Опрос - PullRequest
       5

Service.Controller Status / Опрос

3 голосов
/ 14 ноября 2008

У меня проблема с административным приложением, над которым я работаю. Я создаю интерфейс для остановки, запуска и запроса различных сервисов на 40 или около того серверах.

Я смотрю на service.controller и успешно останавливал и запускал различные сервисы с помощью событий кнопок, но сейчас я пытаюсь найти способ вернуть статус сервиса в текстовое поле и каждый раз запрашивать статус сервиса 10 секунд или около того, и я чувствую, что я бью кирпичную стену.

У кого-нибудь есть какие-либо советы или идеи?

Спасибо !!

Ответы [ 2 ]

4 голосов
/ 14 ноября 2008

Вы можете запустить периодическую проверку сервиса с помощью объекта 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 голосов
/ 08 августа 2011

Может быть, вы не хотите опрашивать:

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

Приветствие Evolved

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...