显示进度条上完成的工作百分比

时间:2013-07-11 13:22:00

标签: c# winforms c#-4.0

我需要使用该主题在进度条中显示方法DoLongWork()完成的工作的百分比

Public string  DoLongWork(int varName)
{
      Thread.Sleep(1000000);

       /*This method will take 1 hour to return the result (say)*/
      Return "Done";
 }

DoLongWork()方法将对数据库进行备份。您知道哪个会花费更多时间来执行数据库备份,我需要显示在progressbar上进行备份的百分比。谢谢

任何类型的建议都将受到高度赞赏。

4 个答案:

答案 0 :(得分:3)

您可以使用BackgroundWorker来报告已经过的进度。一个小例子:

/// <summary>
/// Start a new worker
/// </summary>
void StartWork()
{
    var backgroundWorker = new BackgroundWorker();

    //make sure the worker reports on progress
    backgroundWorker.WorkerReportsProgress = true;

    //we want to get notified when progress has changed
    backgroundWorker.ProgressChanged+=backgroundWorker_ProgressChanged;

    //here we do the work
    backgroundWorker.DoWork += backgroundWorker_DoWork;

}

void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    //do long work
}

ProgressBar _progressBar = new ProgressBar();
void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    //when we are notified about progress changed, update the progressbar
    _progressBar.Value = e.ProgressPercentage;
}

答案 1 :(得分:2)

对于您想要做的事情,我建议后台工作人员执行该方法并提供检查进度条状态的功能。

http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx

答案 2 :(得分:1)

从您的问题中不清楚,但我假设您指的是如何管理线程,并且您可能正在使用WinForms?

如果是这样的话:

  • 在后台(或非UI)线程上执行“DoLongWork”功能。有多种方法可以做到这一点,包括使用ThreadPool类,或者创建一个引用你的方法并在其上调用Start()的新Thread对象

  • 在DoLongWork中完成工作期间(即每次循环一次可能一次?),将进度图发布回UI线程,以便可以在进度条控件上呈现。这是必需的,因为必须在UI线程上更改控件。查看Control.Invoke和Control.BeginInvoke方法来执行此操作

您可能还想重新考虑您的DoLongWork方法是否具有返回值。 如果它在一个单独的线程上运行,我不确定返回值是否有任何地方......正常的方法是将它的结果存储在某处,以便它可以由运行时的逻辑检索工作完成了。假设在UI完成时发生了某些事情,这可能是一个单独的方法,由DoLongWork在UI线程上调用,使另一个Invoke / BeginInvoke调用成为它的最后一步。

答案 3 :(得分:0)

您应该考虑使用后台工作程序来更新进度条

这是一个示例Background worker with progress bar