индикатор выполнения / круг при попытке запустить / остановить сервис - PullRequest
1 голос
/ 22 июня 2011

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

так вот мой код:

  public Form1()
    {
        InitializeComponent();
        this.MaximizeBox = false;
    }        

    private void StartService_button_Click(object sender, EventArgs e)
    {
        StartService("aspnet_state", 60000);           
    }

    private void StartService(string serviceName, int timeoutMilliseconds)
    {
        ServiceController service = new ServiceController(serviceName);

        TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);

        service.Start();
        service.WaitForStatus(ServiceControllerStatus.Running, timeout);
    }

    private void StopService_button_Click(object sender, EventArgs e)
    {
        StopService("aspnet_state", 60000);          
    }

    private void StopService(string serviceName, int timeoutMilliseconds)
    {
        //TBD:Remove_Try_Catch          
        ServiceController service = new ServiceController(serviceName);
        TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);

        service.Stop();
        service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
    }

    private void RestartService_button_Click(object sender, EventArgs e)
    {
        RestartService("aspnet_state", 60000);          
    }

    private void RestartService(string serviceName, int timeoutMilliseconds)
    {
        ServiceController service = new ServiceController(serviceName);

        int millisec1 = Environment.TickCount;
        TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
        if (!(service.Status.Equals(ServiceControllerStatus.Stopped) || service.Status.Equals(ServiceControllerStatus.StopPending)))
        {
            service.Stop();
            service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
        }
        // count the rest of the timeout
        int millisec2 = Environment.TickCount;
        timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2 - millisec1));

        if (!(service.Status.Equals(ServiceControllerStatus.Running) || service.Status.Equals(ServiceControllerStatus.StartPending)))
        {
            service.Start();
            service.WaitForStatus(ServiceControllerStatus.Running, timeout);
        }
    }       

1 Ответ

3 голосов
/ 22 июня 2011

Как насчет изменения курсора на WaitCursor до service.Start () и его возврата после метода .Start ()

...