Удаление обработчиков событий COM автоматически в C # - PullRequest
1 голос
/ 24 сентября 2010

У меня есть отдельный 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-событий вручную, чтобы он не запускался в финализаторе?

...