Вы не можете показать значимый прогресс, если вы не знаете, сколько времени это займет. Вы не можете знать, что запуск службы занимает от 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");
}
}