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