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 { } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д