我正在开发一个启动/停止/重启Windows服务的Winform(C#)应用程序。我想在操作完成之前放置一个进度条。我是.NET编程的新手。请帮助我实现这个功能。
我正在开发一个启动/停止/重启Windows服务的Winform(C#)应用程序。我想在操作完成之前放置一个进度条。我是.NET编程的新手。请帮助我实现这个功能。
如果你不知道需要多长时间,就无法展示有意义的进度。服务启动可能需要1到30秒,你只能向用户展示一个“仍在工作中”的指示器。ProgressBar支持这一功能,只需将Style属性设置为“Marquee”即可。
你还需要在工作线程中启动服务,以避免界面冻结。最好使用BackgroundWorker来实现。可以仿照下面的代码:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
ServiceProgressBar.Style = ProgressBarStyle.Marquee;
ServiceProgressBar.Visible = false;
}
private void StartButton_Click(object sender, EventArgs e) {
this.StartButton.Enabled = false;
this.ServiceProgressBar.Visible = true;
this.backgroundWorker1.RunWorkerAsync("foo");
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
var ctl = new ServiceController((string)e.Argument);
ctl.Start();
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
this.StartButton.Enabled = true;
this.ServiceProgressBar.Visible = false;
if (e.Error != null) {
MessageBox.Show(e.Error.ToString(), "Could not start service");
}
}
progressBar.Maximum = listOfServicesToStart.Count;
progressBar.Value = 0;
for (int i = 0; i < listOfServicesToStart.Count; i++)
{
// Start service listOfServicesToStart[i]
progressBar.Value = i;
Application.DoEvents();
}
如果您计划可视化服务的启动过程:我想您可能无法很好地完成它。Windows中的服务管理器似乎执行以下操作:
ServiceController.WaitForStatus
以查看服务是否已进入相应状态这似乎是唯一的方法。