0

我在进度条方面遇到严重问题。我正在构建一个自定义备份实用程序,它允许用户现在通过单击按钮强制更新。当他们单击该按钮时,它会调用一个隐藏控制台窗口的控制台应用程序运行完整备份过程,然后完成。在整个过程中没有状态或进度条,因为安装完成后它对用户是透明的......用户引起的问题我们都知道。在 GUI 交互期间,需要有一些东西告诉管理员它正在做某事。这是我的代码:

private void forback_Click(object sender, EventArgs e)
    {
        BackgroundWorker bg = new BackgroundWorker();
        bg.DoWork += new DoWorkEventHandler(MethodToGetInfo);
        bg.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bg_RunWorkerCompleted);
        progressBar1.Style = ProgressBarStyle.Marquee;
        bg.RunWorkerAsync();
    }

    void MethodToGetInfo(Object sender, DoWorkEventArgs args)
    {
        Process info = new Process();
        info.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        info.StartInfo.FileName = "C:\\Rameses\\Program\\Day_Cloud_Backup.exe";
        info.StartInfo.UseShellExecute = false;
        info.StartInfo.CreateNoWindow = true;
        info.StartInfo.RedirectStandardOutput = true;
        info.Start();
    }

    void bg_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs args)
    {
        MessageBox.Show("it's f***ing done");
    }

我到底做错了什么。我单击按钮,应用程序运行......但消息框立即显示并且进度条没有停止。

有任何想法吗?

4

1 回答 1

0

这里有两件事。

要让进度条停止,您需要在 RunWorkerCompleted 回调中告诉它停止(在您的情况下,更改样式)。

为了使线程不立即返回,您需要阻塞线程以等待您启动的进程完成。一种方法是使用 WaitForExit Process 方法:

...
info.Start();
info.WaitForExit();

http://msdn.microsoft.com/en-us/library/fb4aw7b8.aspx

这将使线程在调用 WorkerCompleted 回调之前等到您的进程完成。

于 2013-04-20T18:52:39.270 回答