Обеспечение утилизации вызывается, когда класс .net представлен COM - PullRequest
1 голос
/ 19 августа 2010

Я выставил класс .net для COM. Класс наследуется от IDisposable, потому что мне нужно очистить некоторые неуправляемые ресурсы. В среде .net я бы обернул свой класс в область применения, чтобы всегда вызывать метод Dispose (). Есть ли возможность сделать это, если я использую оболочку COM? Я инсантирую класс из VB6 и хочу убедиться, что Dispose вызывается, или я должен просто верить, что он будет вызван в конечном итоге CLR

Ответы [ 2 ]

1 голос
/ 19 августа 2010

Dispose не будет вызываться автоматически, но будет финализатор. Если у вас есть неуправляемые ресурсы, которые требуют очистки, внедрите финализатор, который вызывает Dispose (). Обычной практикой является реализация другого метода, Dispose(bool disposing), который вызывается с true из IDisposable.Dispose () и false из вашего финализатора. Если утилизация имеет значение true, вы должны очистить все управляемые ресурсы (при необходимости) и позвонить GC.SuppressFinalize(this).

0 голосов
/ 19 августа 2010

Мое понимание (возможно, довольно ржавое) заключается в том, что COM Callable Wrapper (CCW) не вызывает Dispose(), когда refcount объекта COM падает до 0 - он просто больше не ссылается на объект CLR.

Вам потребуется, чтобы пользователи объекта явно вызывали Dispose() и полагались на финализатор, чтобы выполнить очистку, если они этого не делают.

Некоторые другие идеи, которые могут помочь здесь:

...