C# 尝试启动/停止服务时的进度条/圆圈

C# 尝试启动/停止服务时的进度条/圆圈,c#,winforms,progress-bar,backgroundworker,C#,Winforms,Progress Bar,Backgroundworker,我有一个启动和停止服务的项目。 大多数时候它是快的,但有时不是。所以我想用一种方式向用户显示这个函数正在执行,他应该等待,不要点击其他任何东西 这是我的代码: public Form1() { InitializeComponent(); this.MaximizeBox = false; } private void StartService_button_Click(object sender, EventArgs

我有一个启动和停止服务的项目。 大多数时候它是快的,但有时不是。所以我想用一种方式向用户显示这个函数正在执行,他应该等待,不要点击其他任何东西

这是我的代码:

  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);
        }
    }       

在服务.Start()之前将光标更改为WaitCursor,然后在.Start()方法之后将其更改为WaitCursor,这是一个好主意。但是……在windows中,当您启动/停止/重新启动服务时,会显示进度条,因此我认为它应该是标准用户。