未知处理时间的进度条

Gok*_*kul 7 winforms progress-bar

我正在开发启动/停止/重启Windows服务的winform(c#).我想放一个进度条直到动作完成.我是.net编程的新手.请帮助我实现这一目标.

Han*_*ant 10

当您不知道需要多长时间时,您无法显示有意义的进展.您无法知道,服务需要1到30秒才能启动.您所能做的只是向用户显示"我没死,正在处理它"指示器.ProgressBar支持,将Style属性设置为"Marquee".

您还需要在工作线程中启动该服务,以避免UI冻结.最好用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");
        }
    }
Run Code Online (Sandbox Code Playgroud)