MailItem GetItemFromID无限期挂起

时间:2018-11-27 21:32:34

标签: vb.net outlook office-interop

以下是与正在运行的Outlook应用程序交互的代码段。

Try
    OutlookObj = System.Runtime.InteropServices.Marshal.GetActiveObject("Outlook.Application")
Catch ex As Exception
    Console.WriteLine("Something went wrong while trying to connect to Outlook. Make sure Outlook is running. Press any key to exit.")
    Console.Read()
    Exit Sub
End Try

OutlookInspectors = OutlookObj.Inspectors
AddHandler OutlookObj.NewMailEx, AddressOf OutlookObj_NewMail

这是我的新消息事件处理程序。

Private Sub OutlookObj_NewMail(ByVal ID As String) 
    Dim Item As Microsoft.Office.Interop.Outlook.MailItem = OutlookObj.Application.Session.GetItemFromID(ID)
    'Further processing...
End Sub

问题是,它挂在GetItemFromID上。最终,我将得到一个ContextSwitchDeadlock异常。 Office是2016(365 ProPlus,x64,版本1808)。 Windows 101809。Interop是版本15。尝试在AnyCPUx64下运行我的应用程序。

1 个答案:

答案 0 :(得分:0)

使用Namespace.GetItemFromID。请注意,第二个参数(商店ID)是可选的。如果有关存储已被Outlook触摸过,则可以在当前会话中忽略它。如果不是,Outlook将引发“未知条目ID”异常。如果指定了商店条目ID,Outlook将首先打开它,并且商店提供者将有机会在MAPI系统中注册其条目ID。

您可以使用以下代码获取商品:

    set App = CreateObject("Outlook.Application")
    set NS = App.GetNamespace("MAPI")
    NS.Logon
    set Msg = NS.GetItemFromID(EntryID)
    MsgBox Msg.Subject

有关更多信息,请参阅以下链接:

Open Outlook mail Item using EntryID, StoreID, and / or PR_ENTRYID