2012-02-15 1 views
0

Есть ли способ запустить код, когда COM-объект вот-вот будет отключен от RCW без реализации интерфейса IDisposale и явного вызова MyObject.Dispose в клиентском коде?Есть ли способ обработки, когда COM-объект отключен от RCW?

Код не работает. Когда программа вводит субтитры Finalize, ExcelApplication уже отключен от RCW, и я получаю ошибку. Я понимаю, почему это происходит, но я хочу получить решение.

Я хочу, чтобы он работал следующим образом: при освобождении последней управляемой ссылки код из подпрограммы Finalize выполняется до того, как объект COM отключен.

Мой вопрос - это вообще возможно, и если это так, то как я могу обработать это событие внутри класса, без необходимости явно вызывать Finalize извне?

Очень простой класс:

Public Class ExcelRunner 

    Dim ExcelApplication As Excel.Application 

    Public Sub New() 

    ExcelApplication = New Excel.Application 
    ExcelApplication.Visible = True 

    End Sub 

    Protected Overrides Sub Finalize() 

    MyBase.Finalize() 
    ExcelApplication.Quit() 

    End Sub 

End Class 

Этот класс используется в форме - только одна строка

Dim ExcelRunner, как ExcelRunner = новый ExcelRunner

Тогда я закрываю форму, и появляется сообщение об ошибке ,

Благодаря

ответ

0

Это звучит, как вы хотите получать уведомления о RCW отсоединение только прежде чем это произойдет. Если это так, к сожалению, нет такого способа втянуться в это. Ваш код должен вместо этого учитывать возможность его непредвиденного отключения.

+0

Да, я хочу получать уведомление непосредственно перед тем, как оно произойдет. – xll

+0

@xll, к сожалению, это невозможно. – JaredPar

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

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