Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 16.02.2017
Сообщений: 52

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

29.04.2017, 21:21. Показов 5152. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Эта ошибка возникает при попытке перенести все файлы из одной папки в другую
"CLR не удалось перейти из COM-контекста 0x7fb6f0 в COM-контекст 0x7fb638 за 60 секунд. Наиболее вероятно, что поток, владеющий контекстом/апартаментом назначения, находится в режиме ожидания или выполнения очень длительной операции без прокачки сообщений Windows. Обычно эта ситуация отрицательно влияет на производительность и даже может привести к зависанию приложения или чрезмерному расходованию памяти. Чтобы избежать этой проблемы, все потоки однопоточного апартамента (STA) должны использовать примитивы ожидания для прокачки (например, CoWaitForMultipleHandles) и периодически прокачивать сообщения во время длительных операций."
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.04.2017, 21:21
Ответы с готовыми решениями:

Ошибка при переносе из pascal в c#
Здравствуйте,просматривая стандартные програмки на паскаль обнаружил интересную прогр. о моделировании поведения рыб(),я решил портировать...

Ошибка при переносе данных в массив
Здравствуйте. Проблема с StudentsAverageMark. Для примера были созданы только 3 студента, но, возможно, понадобится больше, поэтому создан...

Сохранение знака при переносе строки
Подскажите, как сделать чтобы при переносе строки сохранялся знак(точка, восклицательный, вопросительный) class Program { ...

8
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
30.04.2017, 12:42
Цитата Сообщение от Banana4Man Посмотреть сообщение
Эта ошибка возникает при попытке перенести все файлы из одной папки в другую
Код в студию.
1
0 / 0 / 0
Регистрация: 16.02.2017
Сообщений: 52
30.04.2017, 17:30  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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 { }
            }
 
        }
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
30.04.2017, 18:17
У меня подобная ошибка возникала только во время отладки: при нехватке ОЗУ при работе с одним довольно большим проектом. Для проекта было характерно скачкообразное "поедание" физической памяти при старте приложения, поскольку там много всяких проверок происходило.
Вообщем-то ошибка говорит сама за себя:
Цитата Сообщение от Banana4Man Посмотреть сообщение
поток, владеющий контекстом/апартаментом назначения, находится в режиме ожидания или выполнения очень длительной операции без прокачки сообщений Windows.
Скорее всего, у вас аналогичная проблема - в потоке происходит долговременная вычислительная операция, которая не дает CLR получить к нему доступ.

Добавлено через 5 минут
Попробуйте переписать код с использованием потоков из пула, и результат записывать в listBox не после каждой операции копирования, а после, скажем 5 операций, чтобы не так часто дергать GUI-поток.
0
0 / 0 / 0
Регистрация: 16.02.2017
Сообщений: 52
30.04.2017, 18:33  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
в потоке происходит долговременная вычислительная операция, которая не дает CLR получить к нему доступ
Перед выполнением этой операции, выполняется ещё несколько, но я тестировал их отдельно и всё прекрасно работало. Только что опробовал программу на пустом текстовом файле и результат тот же, поэтому мне кажется маловероятным, что виноваты вычислительные операции

Добавлено через 8 минут
Похоже, из-за того, что я установил пустой блок catch, Visual Studio не выдавала никаких ошибок
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
30.04.2017, 18:45
Я не в курсе, что это за понятие такое "переход в COM-context", но очевидно, что этот переход использует сообщения windows.
Раз у вас всю работу делает GUI-поток, то видимо, из-за его занятости происходит ошибка, надо либо:
1. Разгрузить GUI-поток
2. Как указано в описании, надо
Цитата Сообщение от Banana4Man Посмотреть сообщение
периодически прокачивать сообщения во время длительных операций
. То есть вызывать функцию CoWaitForMultipleHandles.
Предпочтительнее, конечно, первый вариант.
0
0 / 0 / 0
Регистрация: 16.02.2017
Сообщений: 52
30.04.2017, 20:03  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Раз у вас всю работу делает GUI-поток, то видимо, из-за его занятости происходит ошибка
Цитата Сообщение от Banana4Man Посмотреть сообщение
из-за того, что я установил пустой блок catch, Visual Studio не выдавала никаких ошибок
Я уже исправил все ошибки
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
30.04.2017, 20:06
Что же было?
0
0 / 0 / 0
Регистрация: 16.02.2017
Сообщений: 52
30.04.2017, 20:12  [ТС]
i становился больше размера одного из массивов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.04.2017, 20:12
Помогаю со студенческими работами здесь

Ошибка при переносе программы на другой ПК
Доброго времени суток. Столкнулся с проблемой. Недавно начал изучать C#. Написал программу, скомпилировал. Программа работает без ошибок у...

Программа по отправке почты при переносе на сервер перестает работать
Посылаю почту через SMTP. У меня на компе все работает, ставлю программу на сервер, получаю ошибку &quot;Failure sending mail&quot;. Как...

Ошибка Socket Permission при переносе приложения с Win7 на WinXP
Доброго времени суток. Пишу клиент-серверное приложение с использованием сокетов (Socket). Пишу на компьютере под управлением Windows...

Ошибки при переносе файлов на другой pc
Перенес я все свои работы на другой компьютер(обновлял комплектующие) и в среде Qt Creator перестала запускатся программа, при компиляции...

Filezilla ошибка при переносе файлов
Вхожу - все ОК. Как только начинаю переносить файлы начинает выдавать ошибку. Ответ: 220-Local time is now 18:25. Server port: 21. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru