Состояние / опрос Service.Controller

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

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

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

Спасибо!!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
2 741
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете инициировать периодическую служебную проверку с помощью объекта Timer. Вы можете запускать свои служебные запросы по событию Elapsed.

    private void t_Elapsed(object sender, ElapsedEventArgs e)
    {
        // Check service statuses
    }

Что касается отображения статусов в текстовом поле, вы должны иметь возможность использовать метод ToString () для статуса сервиса и отображать его в обычном текстовом поле. Помните, что вы можете или не можете быть в потоке графического интерфейса, реагируя на события таймера, поэтому вам нужно вызвать себя в основном потоке.

    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

Ваше здоровье Развитый

Другие вопросы по теме