Иногда, когда я заканчиваю приложение, и он пытается освободить некоторые COM-объекты, я получаю предупреждение в отладчике:
RaceOnRCWCleanUpбыл обнаружен
Если я пишу класс, который использует COM-объекты, мне нужно реализовать IDisposable и вызвать Marshal.FinalReleaseComObject на них в IDisposable.Dispose, чтобы их правильно отпустить?
Если Dispose не вызывается вручную, тогда мне все равно нужно освободить их в финализаторе или будет автоматически выпущена GC? Теперь я вызываю Dispose(false) в финализаторе, но мне интересно, правильно ли это.
В COM-объекте, который я использую, также есть обработчик событий, который прослушивает класс. По-видимому, событие возникает в другом потоке, так как правильно его обрабатывать, если он уволен при утилизации класса?
