Вызов управления - копировать файл блокирует другой поток - PullRequest
0 голосов
/ 28 июня 2018

У меня проблема с фоновым работником. Я написал программу для копирования файлов с локального диска на сетевой диск, и я хочу, чтобы во время выполнения процесса крутился индикатор выполнения по кругу (не показывает прогресс). Когда я устанавливаю backgroundworker в пустую кнопку, все работает нормально, но когда я устанавливаю backgroundworker в кнопку, которая есть функция для копирования файлов, прогрессбар показывает, когда процесс копирования завершен. Почему и как я могу решить это? Ниже код.

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
circularProgressBar1.BeginInvoke(new MethodInvoker(sd));
}

public void sd()
{
    circularProgressBar1.Visible = true;
   circularProgressBar1.Enabled = true;
   circularProgressBar1.Style = ProgressBarStyle.Marquee;
}
private void backgroundWorker1_ProgressChanged(object sender, 
ProgressChangedEventArgs e)
{
    circularProgressBar1.Value = e.ProgressPercentage;
}

private void backgroundWorker1_RunWorkerCompleted(object sender, 
RunWorkerCompletedEventArgs e)
{
    MessageBox.Show("End");
}

  private void button1_Click_1(object sender, EventArgs e)
   {
  backgroundWorker1.RunWorkerAsync();
  }

private void copy_Click(object sender, EventArgs e)
{
 backgroundWorker1.RunWorkerAsync();
   List<string> pathList = new List<string>();

// for example add 1000 path
pathList.add("C:\test\2.jpg");
pathList.add("C:\test\3.jpg");

foreach(string in in pathList)
{
    File.Copy(in,"D:\test2",true);
}   
}

1 Ответ

0 голосов
/ 28 июня 2018

Вам нужно поместить File.Copy в backgroundWorker1_DoWork - это то место, где выполняется фоновая работа.

Вы можете активировать circularProgressBar перед вызовом на backgroundWorker1.RunWorkerAsync и отключить его в backgroundWorker1_RunWorkerCompleted.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...