.NET 2.x Общее копирование файлов backgroundWorker1 - C#

Узнай цену своей работы

Формулировка задачи:

Вот та код Вывести прогресс скопированных файлов
         
       private void button1_Click(object sender, EventArgs e)
        {
              backgroundWorker1.RunWorkerAsync();
              
               for (int i=0; i<10; i++)
               {
                  Copy_Dowork(@"C:\Video_"+i+".avi",@"D:\Video_"+i+".avi");
               } 
       }

        private void CopyFiles(string file_old, string file_new)
        {
            File.Copy(file_old,file_new,true);
        }
 
       public void Copy_Dowork(string old_f,string new_f)
        {
            old_put = old_f;
            new_put = new_f;
        }
 
        public string old_put { get; set; }
        public string new_put { get; set; }
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            CopyFiles(old_put,new_put);
        }
        
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {            
            progressBar1.Value = e.ProgressPercentage;
            label1.Text = "Прогресс: " + e.ProgressPercentage + " %";
        }
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled == true)
            {
                MessageBox.Show("ОТМЕНА!", "INFO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else if (e.Error != null)
            {
                MessageBox.Show(e.Error.Message, "ОШИБКА", MessageBoxButtons.OK, MessageBoxIcon.Error);
                //resultLabel.Text = "Error: " + e.Error.Message;
            }
            /*else
            {
                MessageBox.Show("Упаковано", "ОШИБКА", MessageBoxButtons.OK, MessageBoxIcon.Information);
                //resultLabel.Text = "Done!";
            }*/
        }
Не работает пишет backgroundWorker1 занят

Решение задачи: «.NET 2.x Общее копирование файлов backgroundWorker1»

textual
Листинг программы
public void CreateParts(string pathBaseFolder, string pathParts, string name_part, int partCount, string copy_move)
        {
            long files_all_size = 0;
            long folder_size_part = 0;
            string dir_file_path = "";
            long size_files_all = 0; // весь размер файлов
            int size_value = 0;
            //progressBar1.Minimum = 0;
            //progressBar1.Maximum = N_brower_files;
            //progressBar1.Step = 1;
            //long Mbyte_files_all_size = 0;
            //long Mbyte_folder_size_part = 0;
 
            files = new List<FileItem>();
 
            //progressBar1.Maximum = size_files_all;
            //backgroundWorker1.ReportProgress(size_files_all);
 
            string[] folderName = new string[partCount]; //стрковый масив, число в строки разбил
            FileSearch(pathBaseFolder);// размещаем в files все файлы из каталога
 
            files = files.OrderByDescending(f => f.Size).ToList(); // сортируем эти файлы по размеру
 
            for (int i = 0; i < files.Count; i++)
            {
                size_files_all += files[i].Size; // Когда отсортированы по размеру , файлы добавляються в List
                // Тогда можно получить общий размер
            }
            progressBar1.Maximum = (int)size_files_all;
 
            // условие если папки нету part то создавать 
            if (!Directory.Exists(pathParts)) Directory.CreateDirectory(pathParts);
            for (int i = 0; i < partCount; i++)// создаем папки 5 
            {
                // записываем строковый масив part1 part2......5
                folderName[i] = pathParts + @"\" + name_part + (i + 1).ToString();
                //folderName[i] = RemoveSpaces(folderName[i]);
                // создаем папки 
                Directory.CreateDirectory(pathParts + @"\" + name_part + (i + 1).ToString());
 
            }
 
            var folders = new long[partCount];
            // далее, попробуй составить алгоритм разбиения  списка файлов на части с сохранением в part1...5
            switch (copy_move)
            {
                case mass_cop:
 
                    // сортируем по размеру
                    foreach (var f in files.OrderByDescending(f => f.Size))
                    {
                        var i = FindMinFolder(folders);
                        f.TargetFolder = i;
                        folders[i] += f.Size;
                        size_value += (int)f.Size;
                        try
                        {
                            dir_file_path = f.Dir.Replace(pathBaseFolder, "");
 
                            if (String.IsNullOrEmpty(folderName[i]))
                            {
                                Directory.CreateDirectory(pathParts + @"\" + name_part + "1" + dir_file_path);
                                //Copy_Files_ProgressBar(f.Path,pathParts + @"\" + name_part + "1" + dir_file_path + @"\" +Path.GetFileName(f.Path));
                                //backgroundWorker1.RunWorkerAsync();
                  
                                Copy_progress(f.Path, pathParts + @"\" + name_part + "1" + dir_file_path + @"\" + Path.GetFileName(f.Path));
                                progressBar1.Value = size_value ;
                                //MessageBox.Show(size_value + "\n" + (int)size_files_all + "\n\nBAR\n" + progressBar1.Value + "\n" + progressBar1.Maximum);
                                /////////progressBar1//////////
                                
                                //label3.Text = "Прогресс: " + (folders[i] * 100) / size_files_all + " %";
                                //progressBar1.Value = (int)folders[i] / (int)size_files_all;
                                //MessageBox.Show(progressBar1.Value + "\n" + progressBar1.Maximum + "\n" + (folders[i] * 100) / size_files_all + "%");
                                /*if (File.Exists(pathParts + @"\" + name_part + "1" + dir_file_path + @"\" + Path.GetFileName(f.Path)))
                                {
                                        
                                    progressBar1.PerformStep();
 
                                }*/
                                /////////progressBar1//////////
                            }
                            else
                            {
                                Directory.CreateDirectory(folderName[i] + @"\" + dir_file_path);
                                //Copy_Files_ProgressBar(f.Path, folderName[i] + dir_file_path + @"\" + Path.GetFileName(f.Path));
                                //backgroundWorker1.RunWorkerAsync();
                               
                                Copy_progress(f.Path, folderName[i] + dir_file_path + @"\" + Path.GetFileName(f.Path));
                                
                                /////////progressBar1//////////
                                progressBar1.Value = size_value;
                                //MessageBox.Show(size_value + "\n" + (int)size_files_all + "\n\nBAR\n" + progressBar1.Value + "\n" + progressBar1.Maximum);
                                //MessageBox.Show(size_value + "\n" + size_files_all);
                                //progressBar1.Value = 50;
                                //label3.Text = "Прогресс: " + (folders[i] * 100) / size_files_all + " %";
                                //progressBar1.Value = (int)folders[i] / (int)size_files_all;
                                //MessageBox.Show(progressBar1.Value + "\n" + progressBar1.Maximum + "\n" + (folders[i] * 100) / size_files_all + "%");
                                /*if (File.Exists(folderName[i] + dir_file_path + @"\" + Path.GetFileName(f.Path)))
                                {
 
                                    progressBar1.PerformStep();
 
                                }*/
                                /////////progressBar1//////////
                            }
                        }
                        catch (Exception ex)
                        {
 
                            MessageBox.Show(ex.Message, "ОШИБКА", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
 
                    }
 
                    //if (progressBar1.Value == progressBar1.Maximum)
                    //{
                        MessageBox.Show("Распределение закончино!", "INFO", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        progressBar1.Value = 0;
                    //}
 
                    break;
                case mass_mov:
                    break;
                default:
                    MessageBox.Show("Не верно: " + copy_move, "ОШИБКА", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    break;
            }
 
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.7 из 5
Похожие ответы