COM 형식 (tlbimp.exe을 사용하여 생성)과이 개체를 래핑하는 C# 클래스가 있습니다. C# 래퍼의 마무리 도구에서 정리를 수행하려고합니다.finalizer에서 COM 객체를 참조하거나 사용할 수 있습니까?
public class MyClass : IDisposable
{
private IMyComObject comObject;
public MyClass()
{
comObject = new MyComObject();
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~MyClass()
{
Dispose(false);
}
protected virtual void Dispose(bool disposing)
{
// Be tollerant of partially constructed instances
if (comObject != null)
{
comObject.Cleanup();
// Account for object being disposed twice
comObject = null;
}
}
// Other bits go here...
}
나는 파이 나라가 어떤 순서로 실행 수 있다는 것을 알고 내가 tlbimp 말할 수있는 내가 그러나 지금까지, 파이널 라이저를 구현하는 객체를 사용하려고 시도해서는 안 : 나는 다음처럼 작성할 수있는 가이드 라인 here에 따라 생성 된 COM 유형은 finalizer를 구현하지 않으므로 위의 내용은 정상입니다.
그러나이 질문에 은 최종 사용자의 COM 개체를 참조하고 사용하는 것이 안전합니까? 그렇다면 공식 문서를 찾을 수 없었습니다.
당신이 당신의 폐기 방법의 시작 부분에 GC를 호출하려고 했습니까? – Bond
그들은 finalizer를 구현합니다. COM 개체가 해제되는 방법입니다. 따라서 안전하지 않습니다. –
@HansPassant 나는 이것을 생각했지만 이것을 설명하는 문서를 찾을 수 없으며 해체에서 최종자를 볼 수 없다. – Justin