2012-02-15 3 views
0

COM 개체가 IDisposale 인터페이스와 명시 적으로 MyObject.Dispose를 클라이언트 코드로 구현하지 않고 RCW에서 연결을 끊을 때 코드를 실행할 수있는 방법이 있습니까?COM 개체가 RCW에서 연결이 끊어지면 처리 할 수있는 방법이 있습니까?

아래 코드는 작동하지 않습니다. 프로그램이 Finalize 하위를 입력하면 ExcelApplication은 이미 RCW에서 연결이 끊어져 오류가 발생합니다. 왜 그런지 이해하지만 해결책을 원합니다.

마지막으로 관리되는 참조가 해제되면 COM 개체 연결이 끊어지기 전에 Finalize 하위의 코드가 실행됩니다.

내 질문은 - 전혀 가능하지 않다. 그렇다면 외부에서 Finalize를 명시 적으로 호출 할 필요없이 어떻게 클래스 내에서이 이벤트를 처리 할 수 ​​있습니까?

매우 간단한 클래스는 : - 단지 한 줄

가 그럼 난 양식을 닫습니다 ExcelRunner = 새로운 ExcelRunner로

희미한 ExcelRunner하고, 오류가 발생

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 

이 클래스는 양식에 사용된다 . 당신이 RCW에 대한 알림을 수신 할 것 소리

감사

답변

0

는 그런 일이 바로 전에 분리된다. 그렇다면 불행하게도 그런 식으로 연결할 수 없습니다. 코드에서 예기치 않게 연결이 끊어 질 가능성을 고려해야합니다.

+0

예, 발생하기 직전에 알림을 받고 싶습니다. – xll

+0

@xll 불행히도 그건 불가능합니다. – JaredPar

관련 문제