简体   繁体   中英

Progress bar is not updating on another form

I have to delete files and sub folders from specific folder, while deleting the files progress bar should show progress bar which is on the another form.

I have taken background worker for this. progress bar value is changing as excepted but on screen progress bar is not displaying updating percentage.

I am using visual studio 2005 . Because this is old project.

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)
    {

    }
}

And below is code on form where progress bar is.

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;
    }
}

Your help may appreciated.

You can achieving with the help of following code

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                
        }   

I wrote the method of Deleting the files on frmProgress form and it resolved my problem.

Thanks to all of you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM