在进度栏上显示完成工作的百分比
本文关键字:工作 百分比 显示 | 更新日期: 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调用作为其最后一步。
您应该考虑使用后台工作程序来更新进度条
这是一个带有进度条