【问题标题】:Outlook vb.net how to handle the ItemAdd event for the SentItems folderOutlook vb.net 如何处理 SentItems 文件夹的 ItemAdd 事件
【发布时间】:2017-06-16 16:54:08
【问题描述】:

我正在尝试处理将新项目添加到 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

加载项编译,但 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 类声明之后,在任何子类声明之前执行所有这些操作。

感谢您提供的任何帮助。

【问题讨论】:

    标签: vb.net outlook vsto outlook-addin


    【解决方案1】:

    你可以在所有 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 文章中阅读更多相关信息。

    【讨论】:

    • 我认为我缺少的部分是“在所有 Outlook 对象都被初始化之后”,这就是为什么当我将语句移到 sub 时,它起作用了。谢谢你。老实说,我不太了解 ReleaseComObject 部分:我引用哪个对象应该释放?如果我释放 Items 集合,我还能捕获 SentItem 事件吗?
    【解决方案2】:

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

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

    到 ThisAddin_Startup 子,它按预期工作。

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

    【讨论】:

      猜你喜欢
      • 2022-08-05
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 2017-06-27
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多