У меня проблема с административным приложением, над которым я работаю. Я создаю интерфейс для остановки, запуска и запроса различных сервисов на 40 или около того серверах.
Я смотрю на service.controller и успешно останавливаю и запускаю различные службы с помощью событий кнопок, но теперь я пытаюсь найти способ вернуть статус службы в текстовое поле и запросить статус службы каждые 10 секунд или так, и я чувствую, что врезаюсь в кирпичную стену.
Есть ли у кого-нибудь советы или идеи?
Спасибо!!





Вы можете инициировать периодическую служебную проверку с помощью объекта 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
Ваше здоровье Развитый