2014-11-20 5 views
0

은 COM 객체가 파일 잠금을 해제하지 않습니다 그것을 삭제하십시오 (IO.File.Delete). (최종) ReleaseComObject는 다음 코드를 사용하는 경우

Dim modiDocument As New MODI.Document 
modiDocument.Create(TifFile) 
For Each modiImage In modiDocument.Images 
    'Doesn't matter if I enter code here or not. 
Next 
modiDocument.Close(False) 

지금 파일이 고정됩니다

그러나 나는 다음 파일이 잠겨 될 이미지를 열거 할 때.

Dim modiDocument As New MODI.Document 
modiDocument.Create(TifFile) 
For Each modiImage In modiDocument.Images 
    Marshal.ReleaseComObject(modiImage) 
Next 
Marshal.ReleaseComObject(modiImage) 
modiDocument.Close(False) 
Marshal.ReleaseComObject(modiDocument) 

예, 나는 또한 FinalReleaseComObject을 시도 :

내가 좋아하는,이 문제를 해결하기 위해 모든 (내 생각)을 시도했다.

지금까지 행운이 없습니다.

나는이 문제를 어떻게 해결할 수 있습니까?

주의 : 여기의 예제는 VB입니다. 또한 C#을 알고 있으므로 코드 예제를 제공하는 언어는 중요하지 않습니다.

+0

'FinalReleaseComObject'는 릴리스 될 때까지'ReleaseComObject'를 호출합니다. 아마도 3 번 이상 반복 될 것입니다. 그래서 FinalReleaseComObject'를 시도해야합니다. – OneFineDay

+0

결과없이 시도했습니다. –

+0

아마 IEnumVariant로 볼 수없는 열거 자 객체가 있습니다. 일반적으로 수동 메모리 관리를 구현하는 것이 나쁜 생각 인 이유는 VB.NET 및 C#의 구문 설탕은 너무 많은 로프를 사용하여 스스로 걸려 넘어지게하는 것입니다. [이 읽으십시오] (http://stackoverflow.com/a/25135685/17034). –

답변

1

인스턴스화하는 모든 COM 개체를 해제해야하며 매우 간단합니다. 예 : 너는 modiDocument.Images을 놓쳤다.

다음은 도움이 될 수

modiDocument.Create(TifFile) 
var images = modiDocument.Images 
For Each modiImage In images 
    ... 
Next 
... 
Marshal.ReleaseComObject(images) 

를 추가 COM 개체를 인스턴스화 각 루프의 경우에 코드를 추가하는 경우, 그들도 정리해야합니다.

관련 문제