У меня есть проект, который запускает и останавливает службу.В большинстве случаев это быстро, но иногда это не так.поэтому я хочу показать пользователю, что функция выполняется, и он должен подождать и ничего не нажимать.
так вот мой код:
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);
}
}