ContextSwitchDeadlock при переносе файлов - C#

Узнай цену своей работы

Формулировка задачи:

Эта ошибка возникает при попытке перенести все файлы из одной папки в другую "CLR не удалось перейти из COM-контекста 0x7fb6f0 в COM-контекст 0x7fb638 за 60 секунд. Наиболее вероятно, что поток, владеющий контекстом/апартаментом назначения, находится в режиме ожидания или выполнения очень длительной операции без прокачки сообщений Windows. Обычно эта ситуация отрицательно влияет на производительность и даже может привести к зависанию приложения или чрезмерному расходованию памяти. Чтобы избежать этой проблемы, все потоки однопоточного апартамента (STA) должны использовать примитивы ожидания для прокачки (например, CoWaitForMultipleHandles) и периодически прокачивать сообщения во время длительных операций."

Решение задачи: «ContextSwitchDeadlock при переносе файлов»

textual
Листинг программы
  1. public void DiskOrUSB(FileInfo[] source, FileInfo[] path, string folderD, string folderU)
  2.         {
  3.             int i = 0;
  4.             int l;
  5.             if (path.Length > source.Length) { l = path.Length; } else { l = source.Length; }
  6.                 while (i < (l+1))
  7.             {
  8.                    try
  9.                 {
  10.                     string fo = folderU + ((source[i].Directory).ToString()).Remove(0, folderD.Length);
  11.                     string fo1 = folderD + ((path[i].Directory).ToString()).Remove(0, folderU.Length);
  12.                     string CFile = fo + "\" + source[i].Name;
  13.                    if (!Directory.Exists(fo))
  14.                    {
  15.                        Directory.CreateDirectory(fo);
  16.                        listBox1.Items.Add(fo);
  17.                    }
  18.                    if (!File.Exists(fo + "\" + source[i].Name))
  19.                    {
  20.                        source[i].CopyTo(fo);
  21.                        listBox1.Items.Add(source[i] + "__" + fo);
  22.                    }
  23.                    if (!File.Exists(CFile))
  24.                    {
  25.                        path[i].Delete();
  26.                    }
  27.                    if (File.Exists(fo + "\" + source[i].Name))
  28.                    {
  29.                        if (source[i].LastWriteTime != File.GetLastWriteTime(CFile))
  30.                        {
  31.                            File.Delete(CFile);
  32.                            source[i].CopyTo(fo);
  33.                            listBox1.Items.Add(CFile);
  34.                        }
  35.                    }
  36.                    progressBar1.Value = (90 * i / l) + 10;
  37.                        ++i;
  38.  
  39.                }
  40.                    catch { }
  41.            }
  42.  
  43.        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы