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中,当您启动/停止/重新启动服务时,会显示进度条,因此我认为它应该是标准用户。