(决赛)发布ComObject不会释放COM对象的文件锁定
本文关键字:对象 COM 文件 锁定 文件锁 释放 决赛 发布 ComObject | 更新日期: 2023-09-27 18:31:09
使用以下代码时:
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 循环中添加代码,则也需要清理这些对象。