[英]Progress bar is not updating on another form
我必须从特定的文件夹中删除文件和子文件夹,而删除文件的进度条应显示进度条,该进度条位于另一种形式上。
为此,我已经聘请了后台工作者。 进度条值正在更改为例外,但屏幕上的进度条未显示更新百分比。
我正在使用visual studio 2005
。 因为这是旧项目。
private void EmptyFolder(DirectoryInfo directoryInfo, long totalSize, frmProgress frmProgressLbl, ref long deletedSize)
{
short percent;
//long deletedSize=0;
try
{
foreach (FileInfo file in directoryInfo.GetFiles())
{
try
{
deletedSize += file.Length;
file.Delete();
percent = Convert.ToInt16((deletedSize * 100) / totalSize);
frmProgressLbl.Percent = percent;
}
catch (Exception ex)
{
}
}
foreach (DirectoryInfo subfolder in directoryInfo.GetDirectories())
{
EmptyFolder(subfolder, totalSize,frmProgressLbl,ref deletedSize);
}
}
catch (Exception ex)
{
}
}
下面是进度条所在的窗体上的代码。
public partial class frmProgress : Form
{
private short percent;
public short Percent { set { percent = value; } }
private BackgroundWorker bgWorker;
public frmProgress()
{
InitializeComponent();
this.bgWorker = new BackgroundWorker();
this.bgWorker.WorkerReportsProgress = true;
this.bgWorker.WorkerSupportsCancellation = true;
this.bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
this.bgWorker.RunWorkerAsync();
}
private void frmProgress_Load(object sender, EventArgs e)
{
this.label1.Text = "Deleting Files...";
this.bgWorker.RunWorkerAsync();
}
void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
this.progressBar1.Value = percent;
}
}
您的帮助将不胜感激。
您可以在以下代码的帮助下实现
private void buttonDelete_Click(object sender, EventArgs e)
{
// Start your task
backgroundWorker.RunWorkerAsync();
}
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
#region Write logic to delete files in this region
var totalFiles = 100;
for (int i = 1; i <= totalFiles; i++)
{
// Report progress
backgroundWorker.ReportProgress((i * totalFiles) / 100);
System.Threading.Thread.Sleep(200);
}
#endregion
}
private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// Update prgores bar
progressBar.Value = e.ProgressPercentage;
}
private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// Do further process when your task is completed
}
我写了在frmProgress表单上删除文件的方法,它解决了我的问题。
感谢大家。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.