Может ли объект com-сервера, написанный на C #, сразу обнаруживать, когда клиент его выпускает? - PullRequest
3 голосов
/ 25 февраля 2011

Объект может знать, когда его клиент создает его, потому что запускается конструктор.

Но поскольку в C # нет детерминированных деструкторов, Dispose или Finalize не будут вызваны, пока GC, в конце концов, не очистит объект.

Есть ли способ, которым объект сервера может быстро обнаружить, что его клиент выпустил его? Мне не нужен объект, выпущенный в этот момент, просто метод с именем.

Спасибо, ++ PLS

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

Нет, CCW (COM Callable Wrapper) находится между ними.Он просто сбрасывает ссылку на управляемый объект, когда счетчик ссылок достигает нуля, чтобы в конечном итоге объект можно было собрать.Вы не можете подключиться к CCW, это непрозрачно и не генерирует никаких событий.

0 голосов
/ 25 февраля 2011

цель Dispose - сделать детерминированность уничтожения объекта, а не ждать, пока GC вызовет финализатор. В любом случае вы можете вызвать Marshal.ReleaseComObject, чтобы уменьшить счетчик ссылок на COM-объект.

...