2016-04-23 3 views
0

Я успешно просматриваю, когда приходит новое письмо, используя ItemsEvents_ItemAddEventHandler. Этот код, очевидно, является синхронным вызовом из Outlook, как и следовало ожидать.Outlook VSTO - Синхронизировать состояние входящих сообщений

Я пытаюсь обработать папку «Входящие» после того, как приходит одно сообщение, поэтому производительность процесса приема ухудшается. Мой процесс может быть выполнен (и предпочтительно) после завершения всей загрузки.

Итак, мне кажется, что мне нужен обработчик событий для завершения процесса синхронизации, и я не могу найти его в классах приложений или папок.

Где будет скрываться это состояние или событие?

ответ

1

Фактически ItemAdd Событие является асинхронным и срабатывает после того, как элемент уже добавлен и сохранен. Вы правы в том смысле, что он запускается в основном потоке Outlook.

Вы можете дождаться добавления дополнительных элементов с помощью таймера - отключить/включить его, когда ItemAdd срабатывает событие (которое сбросит таймер). Когда таймер срабатывает позже (пара секунд?), Вы можете быть уверены, что ItemAdd не выстрелил столько, сколько интервал таймера. Обязательно используйте объект Timer из пространства имен Forms (он запускается в основном потоке).

Вы также можете использовать событие объекта SyncObject (/SyncEnd/и т. Д.). Самым первым объектом синхронизации в коллекции Namespace.SyncObjects является «Отправить/получить все».

Обратите внимание, что вы не можете разгружать обработку элементов Outlook во вторичный поток. OOM можно использовать только в основном потоке Outlook. Вам понадобится Extended MAPI (только C++ или Delphi) или Redemption (его семейство объектов RDO может использоваться для вторичных потоков - сохранить значение в основной теме Namespace.MAPIOBJECT, создать объект RDOSession на вторичной теме, установить его свойство MAPIOBJECT) ,

+0

Я начал путь использования таймера, сбрасывая его каждый раз, когда принимается входящее сообщение. Да, я могу сделать эту работу, но она кажется действительно клочья. Любая временная задержка, которую я выбираю, является произвольной и будет полностью зависеть от среды, а также от содержимого, такого как время до привязки d/l. Я исследую SyncObject, чтобы узнать, что это может привести. Благодарю. – JamieMeyer

+0

Предварительные испытания показали, что подход SyncObject работал. К сожалению, это основано на крайних случаях - это исключение, а не правило. Пока не ясно, когда вызывается событие SyncEnd, но оно явно не основано на всех случаях получения, по крайней мере, на основе IMAP/SMTP. Дополнительные исследования показывают, что этот подход также меняется. Привет, Microsoft? Нам нужна помощь здесь. – JamieMeyer

+0

Microsoft не контролирует SO. Если вы хотите что-то от Microsoft, вам нужно открыть заявку на поддержку. –

Смежные вопросы