Во время разработки моего WPF-приложения я неожиданно получил, казалось бы, страшный RaceOnRCWCleanup при закрытии приложения во время отладки.При выполнении без отладчика все было нормально.
Изображение и текст предупреждения:
Помощник по управляемой отладке 'RaceOnRCWCleanup' обнаружилпроблема в 'MyEXE'.Дополнительная информация: Была предпринята попытка освободить используемый RCW.RCW используется в активном потоке или другом потоке.Попытка освободить используемый RCW может привести к повреждению или потере данных.
Трассировка стека была не очень полезна:
[External Code]
> mscoreei.dll!000007fef75c3309()
[Frames below may be incorrect and/or missing, no symbols loaded for mscoreei.dll]
mscoree.dll!000007fef7655b21()
kernel32.dll!0000000077b7f56d()
ntdll.dll!0000000077cb2cc1()
Со времени последнего большого изменения, которое я сделал ранеек ошибке, возникающей в первый раз, было использование объекта COM из моего управляемого кода C #, я, очевидно, подозревал, что OCX (написанный мной).Поиск в сети и в стеке не дал никакого решения.
Тогда я обнаружил, что это происходит только тогда, когда активирован параметр «Включить отладку неуправляемого кода» .Я сделал это, потому что хотел отлаживать OCX, написанный на неуправляемом C ++.Отключение отладки неуправляемого кода немедленно устраняет проблему.
Это произошло в Windows 7, Visual Studio 2010 без SP1.
У кого-нибудь есть объяснение, что здесь происходит?Это ошибка?
Обновление: Эта проблема исчезла, когда я установил пакет обновления 1 для Visual Studio 2010.