Индикатор выполнения не обновляется в другой форме - PullRequest
0 голосов
/ 21 мая 2018

Я должен удалить файлы и подпапки из определенной папки, в то время как при удалении файлов индикатор выполнения должен отображать индикатор выполнения, который находится в другой форме.

Я взял фоновый работник для этого.Значение индикатора выполнения изменяется как исключение, но на экране индикатора выполнения не отображается процент обновления.

Я использую 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;
    }
}

Ваша помощь может быть оценена.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Я написал метод удаления файлов в форме frmProgress, и это решило мою проблему.

Спасибо всем вам.

0 голосов
/ 21 мая 2018

Вы можете достичь с помощью следующего кода

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                
        }   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...