我需要使用该主题在进度条中显示方法DoLongWork()完成的工作的百分比。
Public string DoLongWork(int varName)
{
Thread.Sleep(1000000);
/*This method will take 1 hour to return the result (say)*/
Return "Done";
}
DoLongWork()方法将对数据库进行备份。您知道哪个会花费更多时间来执行数据库备份,我需要显示在progressbar上进行备份的百分比。谢谢
任何类型的建议都将受到高度赞赏。
答案 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)
您应该考虑使用后台工作程序来更新进度条