GetMessageFromMsgFile 和附件枚举的兑换问题
Redemption issue with GetMessageFromMsgFile and Attachment Enumeration
我在遍历 RDOMail 对象的附件集合时遇到问题。如果我使用 GetMessageFromMsgFile 打开外部 MSG 文件并尝试第二次遍历附件,我会收到 E_ACCESSDENIED 异常。我尝试使用 For Each、GetEnumerator 和 Item 属性 访问附件。在所有这些情况下,我第一次访问附件时它是有效的,但任何后续尝试都失败并出现“访问被拒绝”错误。
************** Exception Text **************
System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) at
System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) at System.Runtime.InteropServices.CustomMarshalers.EnumeratorViewOfEnumVariant.MoveNext()
我在同一封邮件上尝试了相同的代码,但直接从收件箱打开,它按预期工作,我可以多次重复附件。
这个问题似乎与 VB.NET 程序集有关,因为如果我在 VBA 和 Excel 中使用相同的代码,我可以多次迭代外部 MSG 文件的附件.
问题是,我需要在文件系统上处理大量外部 MSG 文件,并且能够从 VB.NET 程序集中多次查询附件。
我正在评估 Redemption,然后再购买。
是的,在 MSG 文件之上创建的消息不允许您再次访问附件或附件 table 对象,直到相应对象的第一个实例被释放。
确保避免使用多点符号(以避免隐式变量),并在使用 Marshal.ReleaseComObject()
完成所有 Redemption 对象后立即释放它们。您可能还想在处理文件后调用 GC.Collect()
以释放所有挂起的对象,以防仍有挂起的引用。
我在遍历 RDOMail 对象的附件集合时遇到问题。如果我使用 GetMessageFromMsgFile 打开外部 MSG 文件并尝试第二次遍历附件,我会收到 E_ACCESSDENIED 异常。我尝试使用 For Each、GetEnumerator 和 Item 属性 访问附件。在所有这些情况下,我第一次访问附件时它是有效的,但任何后续尝试都失败并出现“访问被拒绝”错误。
************** Exception Text **************
System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) at System.Runtime.InteropServices.CustomMarshalers.EnumeratorViewOfEnumVariant.MoveNext()
我在同一封邮件上尝试了相同的代码,但直接从收件箱打开,它按预期工作,我可以多次重复附件。
这个问题似乎与 VB.NET 程序集有关,因为如果我在 VBA 和 Excel 中使用相同的代码,我可以多次迭代外部 MSG 文件的附件.
问题是,我需要在文件系统上处理大量外部 MSG 文件,并且能够从 VB.NET 程序集中多次查询附件。
我正在评估 Redemption,然后再购买。
是的,在 MSG 文件之上创建的消息不允许您再次访问附件或附件 table 对象,直到相应对象的第一个实例被释放。
确保避免使用多点符号(以避免隐式变量),并在使用 Marshal.ReleaseComObject()
完成所有 Redemption 对象后立即释放它们。您可能还想在处理文件后调用 GC.Collect()
以释放所有挂起的对象,以防仍有挂起的引用。