VB6 ActiveX EXE не прекращается, когда ссылка на него уничтожена - PullRequest
2 голосов
/ 05 ноября 2010

У меня есть приложение VB6, которое ссылается на приложение VB6 ActiveX.exe, которое ссылается на библиотеку C # .Net через COM. В этой библиотеке C # есть регистрируемый метод обратного вызова, который я добавляю в исходное приложение. Библиотека C # имеет два метода. Один просто вызывает обратный вызов. Другой сигнализирует о событии, которое вызывает простой поток для вызова обратного вызова. Если в моем исходном приложении я использую только прямой метод, когда я устанавливаю activeX = Nothing, приложение activeX исчезает из окна диспетчера задач. Если я просто вызову многопоточный метод один раз, по завершении приложение ActiveX не исчезнет из диспетчера задач на срок до пяти минут. Это в конечном счете уходит. Кто-нибудь когда-нибудь имел дело с таким поведением, и если да, то как заставить activeX завершить работу?

Ответы [ 3 ]

4 голосов
/ 05 ноября 2010

Скорее всего, ваши объекты C # не реализуют IDisposable, и вы явно не избавляетесь от них.В этом случае, если вы передаете объект обратного вызова из exe-файла VB6 activex в C # lib, он удерживает эту ссылку в своих объектах даже после того, как вы освободили объекты, потому что C # это сборщик мусора.В конце концов, когда сборщик очищается, он освобождает те объекты C #, который затем освобождает ссылки на ваши объекты обратного вызова VB6, и все очищается.

1 голос
/ 08 ноября 2010

Вероятно, как указано в других ответах, это сборщик мусора.Поскольку вы знаете, когда ваше приложение VB6 завершается, попробуйте ничего не передавать обратным вызовам .NET и посмотрите, не вызывает ли это преждевременное освобождение.

Убедитесь, что вы выполняете явную очистку при завершении работы любого компонента на основе VB6.

0 голосов
/ 05 ноября 2010

Кто-то опубликовал ссылку на книгу под названием .NET Gotchas в другом месте, которая может иметь отношение к вашим проблемам. С тех пор я заказал книгу, но она еще не пришла. По сути, сборщик мусора еще не закончил курить и забрал неиспользованные предметы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...