Outlook vb.net 如何处理 SentItems 文件夹的 ItemAdd 事件



我正在尝试处理在 VB.net vsto 加载项中将新项目添加到 SentItems 文件夹时触发的 ItemAdd 事件。当我尝试这个时:

Private WithEvents mySentItems As Outlook.Items
mySentItems = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items

我在第二行收到一个声明预期错误,我觉得这很奇怪,因为我认为我只是声明了它。

如果我这样做:

 Private WithEvents mySentItems As Outlook.Items = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items

加载项编译,但随后 Outlook 变得非常生气,在引发此异常后甚至不会加载加载项:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> 
System.NullReferenceException: Object reference not set to an instance of an object.

在声明任何类子之前,我就在 ThisAddin 类声明之后执行所有这些操作。

感谢您提供的任何帮助。

初始化

所有 Outlook 对象后,可以在代码中使用以下声明,看起来像属性或方法返回 null(VB.NET 中没有任何内容(:

 Private WithEvents mySentItems As Outlook.Items = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items

另一个方面是在一行代码中使用多个点。很难理解哪个属性或方法会触发异常,直到您中断链并在一行代码上声明每个属性和方法。

此外,您不会立即释放基础 COM 对象。使用 System.Runtime.InteropServices.Marshal.ReleaseComObject 在完成使用 Outlook 对象后释放该对象。然后在 Visual Basic 中将变量设置为 Nothing(在 C# 中为 null(以释放对该对象的引用。在系统地释放对象一文中阅读有关此内容的更多信息。

您似乎无法在子或函数之外进行分配。我移动了线

mySentItems = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items

到ThisAddin_Startup潜艇,它按预期工作。

如果您这样做了,感谢您对此进行调查,老实说,我这样做不是为了发布我自己的答案,在我最终提出这个问题之前,我一天都没有设法解决这个问题。

最新更新