ContextSwitchDeadlock при переносе файлов - C#
Формулировка задачи:
Эта ошибка возникает при попытке перенести все файлы из одной папки в другую
"CLR не удалось перейти из COM-контекста 0x7fb6f0 в COM-контекст 0x7fb638 за 60 секунд. Наиболее вероятно, что поток, владеющий контекстом/апартаментом назначения, находится в режиме ожидания или выполнения очень длительной операции без прокачки сообщений Windows. Обычно эта ситуация отрицательно влияет на производительность и даже может привести к зависанию приложения или чрезмерному расходованию памяти. Чтобы избежать этой проблемы, все потоки однопоточного апартамента (STA) должны использовать примитивы ожидания для прокачки (например, CoWaitForMultipleHandles) и периодически прокачивать сообщения во время длительных операций."
Решение задачи: «ContextSwitchDeadlock при переносе файлов»
textual
Листинг программы
public void DiskOrUSB(FileInfo[] source, FileInfo[] path, string folderD, string folderU)
{
int i = 0;
int l;
if (path.Length > source.Length) { l = path.Length; } else { l = source.Length; }
while (i < (l+1))
{
try
{
string fo = folderU + ((source[i].Directory).ToString()).Remove(0, folderD.Length);
string fo1 = folderD + ((path[i].Directory).ToString()).Remove(0, folderU.Length);
string CFile = fo + "\" + source[i].Name;
if (!Directory.Exists(fo))
{
Directory.CreateDirectory(fo);
listBox1.Items.Add(fo);
}
if (!File.Exists(fo + "\" + source[i].Name))
{
source[i].CopyTo(fo);
listBox1.Items.Add(source[i] + "__" + fo);
}
if (!File.Exists(CFile))
{
path[i].Delete();
}
if (File.Exists(fo + "\" + source[i].Name))
{
if (source[i].LastWriteTime != File.GetLastWriteTime(CFile))
{
File.Delete(CFile);
source[i].CopyTo(fo);
listBox1.Items.Add(CFile);
}
}
progressBar1.Value = (90 * i / l) + 10;
++i;
}
catch { }
}
}