В течение последних нескольких лет я использовал WPF в смешанном режиме приложения для отображения различных элементов пользовательского интерфейса. WPF используется сборкой C # для генерации пользовательского интерфейса - он ссылается на сборку C ++ / CLI, которая содержит некоторый собственный код. Нативный код не делает никаких вызовов ОС, за исключением нескольких printf; это чисто вычислительный процесс.
При работе с подключенным отладчиком я вижу, как запускается управляемая отладка «RaceOnRCWCleanup» после закрытия приложения, что указывает на наличие некоторого COM-компонента с проблемами очистки многопоточности.
Я не использую COM напрямую, но, возможно, C ++ / CLI или WPF. Предупреждения о закрытии приложения не особенно страшны - в конце концов, приложение все равно закрывается - но я бы хотел понять, что происходит не так. Могу ли я сделать что-нибудь, чтобы избежать этого предупреждения? Есть ли где-то скрытая ошибка, которая только и ждет, чтобы укусить меня, или это ложное предупреждение?
Это пример трассировки стека:
mscorlib.dll!System.Runtime.InteropServices.Marshal.ReleaseComObject(object o) Line 1826 + 0xc bytes C#
PresentationFramework.dll!System.Windows.Documents.TextServicesHost.DeactivateThreadManager() Line 465 + 0xd bytes C#
PresentationFramework.dll!System.Windows.Documents.TextServicesHost.OnUnregisterTextStore(object arg) Line 331 C#
PresentationFramework.dll!System.Windows.Documents.TextEditor.DetachTextStore(bool finalizer) Line 249 + 0x6b bytes C#
WindowsBase.dll!System.Windows.Threading.Dispatcher.ShutdownImplInSecurityContext(object state) Line 1363 + 0xfffffffc bytes C#
mscorlib.dll!System.Threading.ExecutionContext.runTryCode(object userData) Line 484 + 0xce bytes C#
Кто-нибудь испытывал такую же проблему? Кто-нибудь знает, что происходит?