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

本文关键字:工作 百分比 显示 | 更新日期: 2023-09-27 18:21:55

我需要在Progressbar中使用线程显示方法DoLongWork()完成的工作的百分比

Public string  DoLongWork(int varName)
{
      Thread.Sleep(1000000);
       /*This method will take 1 hour to return the result (say)*/
      Return "Done";
 }

DoLongWork()方法将备份数据库。你知道执行数据库备份需要更多的时间,我需要在进度条上显示备份的百分比。感谢

任何类型的建议都将不胜感激。

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

您可以使用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;
}

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

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

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

如果是:

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

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

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

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

这是一个带有进度条

的后台工作程序示例