PDA

View Full Version : کپی کردن پوشه و حجم زیادی از فایلها توسط Background Worker



pouria_bayat
یک شنبه 08 فروردین 1395, 09:05 صبح
سلام وقت بخیر چطور می تونیم حجم زیادی از فایلها رو به گونه ای کپی کنیم که بنامه هنگ نکنه؟
من هم از ترد و هم بک گراند ورکر و هم تسک استفاده کردم در سه حالت برنامه هنگ میکنه و تا زمانی که کپی تموم نشه از حالت هنگ خارج نمیشه.
تابعی که برای کپی استفاده میکنم اینه:


void StartCopy(string sourceFolder, string destFolder)
{
try
{
if (!Directory.Exists(destFolder))
Directory.CreateDirectory(destFolder);
ProgressCounter += 1;
if (ProgressBar.Maximum >= ProgressCounter)
ProgressBar.Value = ProgressCounter;
string[] files = Directory.GetFiles(sourceFolder);
foreach (string file in files)
{
try
{
string name = Path.GetFileName(file);
string dest = Path.Combine(destFolder, name);
if (File.Exists(dest) && !ReplaceAllFiles)
{
if (true)
{
ReplaceAllFiles = true;
File.Copy(file, dest, true);
}
continue;
}
else if (File.Exists(dest)) File.Copy(file, dest, true);
else File.Copy(file, dest);
ProgressCounter += 1;
if (ProgressBar.Maximum >= ProgressCounter)
ProgressBar.Value = ProgressCounter;
}
catch (UnauthorizedAccessException)
{
continue;
}
}
string[] folders = Directory.GetDirectories(sourceFolder);
foreach (string folder in folders)
{
string name = Path.GetFileName(folder);
string dest = Path.Combine(destFolder, name);
StartCopy(folder, dest);
ProgressCounter += 1;
if (ProgressBar.Maximum >= ProgressCounter)
ProgressBar.Value = ProgressCounter;
}

}
catch (Exception ex)
{
//
}
}


اما چیزی که می خواهم تقریبا شبیه کپی ویندوزه بدون کوچکترین افت سرعتی حتی تعداد قایلهای زیاد و حجیم رو کپی میکنه.