Удаление обработчиков событий COM автоматически в C#
У меня есть автономный.exe COM-сервер и тривиальная программа тестирования C#, которая запускает экземпляр сервера и сразу же закрывает его. Работает как шарм. Однако, если я закрываю саму программу C#, я получаю исключение во время выполнения финализатора, потому что она пытается отменить регистрацию / отменить прием COM-событий с больше не работающего COM-сервера.
Исключение составляет
"Первое случайное исключение типа System.Runtime.InteropServices.InvalidComObjectException'произошло в mscorlib.dll"
И callstack:
mscorlib.dll! System.Runtime.InteropServices.ComEventsSink.Unadvise () + 0x20 байт mscorlib.dll!System.Runtime.InteropServices.ComEventsSink.RemoveAll(System.Runtime.InteropServices.ComEventsSxsinks)
mscorlib.dll!System.Runtime.InteropServices.ComEventsInfo.Finalize() + 0x18 байт
Я могу исправить эту ошибку, вручную удалив обработчики событий COM перед выключением сервера. Т.е. myComServer.OnFunkyEvent -= OnFunkyEventHandler; Однако я нахожу это неуместным, подверженным ошибкам и утомительным. Итак, вопрос в том, могу ли я каким-то образом вызвать вызов RemoveAll() для моих COM-событий вручную, чтобы он не запустился в финализаторе?