MailItem GetItemFromID висит бесконечно - PullRequest
0 голосов
/ 28 ноября 2018

Вот фрагмент для взаимодействия с запущенным приложением 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 10 1809. Interop - версия 15. Попробовал запустить мое приложение под AnyCPU и x64.

1 Ответ

0 голосов
/ 29 ноября 2018

Использовать Namespace.GetItemFromID.Обратите внимание, что второй параметр (идентификатор магазина) является необязательным.Вы можете опустить его, если рассматриваемый магазин уже был затронут Outlook в текущем сеансе.Если нет, Outlook вызовет исключение «неизвестный идентификатор записи».Если указан идентификатор записи магазина, Outlook сначала откроет его, и у поставщика магазина будет возможность зарегистрировать свои идентификаторы входа в системе MAPI.

Вы можете получить товар, используя следующий код:

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

Для получения дополнительной информации перейдите по следующим ссылкам:

Открыть почтовый элемент Outlook, используя EntryID, StoreID и / или PR_ENTRYID

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...