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