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

时间:2017-06-15 16:09:05

标签: vb.net outlook vsto outlook-addin

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

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

我在第二行遇到Declaration Expected错误,我觉得这很奇怪,因为我认为我只是声明了它。

如果我这样做:

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

加载项编译但是后来看起来非常生气,在抛出此异常后甚至不会加载加载:

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.

我在声明任何类subs之前的ThisAddin类声明之后正在完成所有这些操作。

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

似乎你不能在子或函数之外进行赋值。我移动了线

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

到ThisAddin_Startup子,它按预期工作。

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

答案 1 :(得分:0)

在初始化所有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)以释放对该对象的引用。请在Systematically Releasing Objects文章中详细了解相关内容。