2009-03-05 1 views
1

Насколько я понимаю, для объекта COM VB6, когда он выходит из области видимости, Class_Terminate сразу же вызывает объект, чтобы он мог его очистить..NET & COM - Class_Terminate/Disposing объекта, когда он выходит за пределы области видимости

Возможно ли иметь такую ​​же функциональность для объекта .NET, который вызывается COM?

Предыстория вопроса основывается на статье MSDN: http://msdn.microsoft.com/en-us/library/aa479313.aspx

Это заменяет объект Session в странице ASP с помощью пользовательского объекта, который сериализует информацию сеанса обратно в базу данных, как только заканчивается страницы по используя Class_Terminate.

Я хочу реализовать объект в .NET, однако, поскольку GC не вызовет финализатор сразу, это немного проблема, так как я не хочу ждать, пока объект будет очищен перед тем, как сериализоваться обратно в базу данных.

Я мог бы просто реализовать IDisposiable и вручную вызывать Dispose() по завершении сеанса, но для этого потребуется изменить любую существующую страницу ASP classic, а не просто включить несколько строк в стандартный файл include.

Так есть способ автоматического вызова кода для выполнения работы, которая требуется, когда страница завершена? :)

ответ

3

Делегирование. Оберните класс .NET COM в класс VB6 Com, который является оболочкой, и в событии Class_Terminate для вызова оболочки.

Если вы не хотите, чтобы переопределить весь интерфейс в VB6 COM класса, то вы могли бы сделать что-то вроде

Public MyNETCOMObject as MyNETCOMObject 

Private Class_Initialize() 
    Set MyNETCOMObject = New MyNetCOMObject 
End Sub 

Private Class_Terminate() 
    If Not MyNETCOMObject = Nothing then MyNETCOMObject.Dispose 
    Set MyNETCOMObject = Nothing 
End Sub 

 Смежные вопросы

  • Нет связанных вопросов^_^