(决赛)发布通信对象不会释放 COM 对象的文件锁定



使用以下代码时:

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

然后 TifFile 没有被锁定,我可以做一些事情,例如删除它(IO.文件.删除)。

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

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

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

以下方法可能会有所帮助:

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

如果在实例化其他 COM 对象的 For Each 循环中添加代码,则也需要清理这些对象。

相关内容

最新更新