Подтвердить что ты не робот

Решить DisconnectedContext в Visual Studio

Когда я запускаю свое приложение с помощью Visual Studio, у меня всегда был DisconnectedContext (управляемый помощник по отладке). Учитывая Google и документы, это может произойти, когда COM-объекты на STA вызываются из другого потока.

Однако, когда я просматриваю все потоки, когда появляется всплывающее окно, я не нахожу ничего подобного. (И я не нахожу ничего странного вообще).

Некоторые идеи о том, как я могу найти способ DisconnectedContext?

4b9b3361

Ответ 1

Нашел это, ища тот же ответ, подумал, что добавлю комментарий...

Эта ошибка практически неизбежна в любом многопоточном приложении, использующем объекты CLR через interop (в переходных потоках). Проблема заключается в том, что CLR имел недетерминированную очистку объектов (которые могут быть RCW, с привязкой потоков к базовым COM-объектам). Невозможно указать время выполнения для очистки объектов, созданных в потоке (по крайней мере, без создания другого недетерминированного ручка очистки в потоке); это ограничение дизайна механизма взаимодействия. Учитывая, что нет никакого способа безопасного выхода из потока, который создал любые объекты CLR, без потенциальной ошибки.

Лучший совет: не используйте CLR/interop, если вы можете ему помочь. Следующий лучший совет: используйте COM + для обработки-изоляции вашего взаимодействия, поэтому среда CLR может жить в процессе, который никогда не завершает потоки (используйте постоянный пул потоков или эквивалент). Следующий лучший совет: присоединяйтесь ко мне, продолжая рассказывать Microsoft об этой проблеме на уровне дизайна с их взаимодействием и надеяться, что они исправит это.

Ответ 2

Это довольно серьезное предупреждение, не игнорируйте его. Сценарий заключается в том, что вы создали COM-объект в потоке и этот поток вышел из него. Но вы продолжаете использовать этот объект. COM позаботится о объектах, которые объявили себя небезопасными по потоку (ака квартира заправлена ​​резьбой), он автоматически марширует любые вызовы этого объекта потоку, который его создал. Это не может работать, когда этот поток больше не находится вокруг.

Игнорирование предупреждения может приводить к возникновению случайных и очень трудных проблем при устранении ошибок расстановки потоков. Материал, который идет тонко неправильно только один раз в неделю. Просмотрите свой код, обратите внимание на то, как создан объект, который он жалуется.