(最终)ReleaseComObject不会释放COM对象的文件锁定

时间:2014-11-20 16:03:28

标签: c# vb.net

使用以下代码时:

Dim modiDocument As New MODI.Document
modiDocument.Create(TifFile)
modiDocument.Close(False)

然后TifFile没有被锁定,我可以做像删除它(IO.File.Delete)。

但是,当我枚举图像时,文件将被锁定:

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#,所以你提供代码示例的语言并不重要。

1 个答案:

答案 0 :(得分:1)

您需要释放您实例化的每个COM对象,并且很容易错过一个。例如。你错过了modiDocument.Images

以下内容可能有所帮助:

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

如果在For Each循环中添加实例化其他COM对象的代码,则还需要清除它们。