Элемент Outlook вызывает событие AftwerWrite, недоступное - PullRequest
0 голосов
/ 13 марта 2020

Я разрабатываю надстройку для Outlook. Моя цель - назначить EntryId только что сохраненному элементу Outlook, в частности элементу Task. Итак, в классе подходящей оболочки у меня есть:

public TaskItemEventWrapper(Outlook.TaskItem item)
        {
            Item = item;
            Id = new Guid();
            Item.BeforeRead += new Outlook.ItemEvents_10_BeforeReadEventHandler(Item_BeforeRead);
            Item.Read += new Outlook.ItemEvents_10_ReadEventHandler(Item_Read);
            Item.Unload += new Outlook.ItemEvents_10_UnloadEventHandler(Item_Unload);
            Item.AfterWrite += Item_AfterWrite;
            Item.AttachmentAdd += Item_AttachmentAdd;
            Item.AttachmentRead += Item_AttachmentRead;
            Item.AttachmentRemove += Item_AttachmentRemove;
            Item.BeforeAttachmentAdd += Item_BeforeAttachmentAdd;
            Item.BeforeAttachmentPreview += Item_BeforeAttachmentPreview;
            Item.BeforeAttachmentRead += Item_BeforeAttachmentRead;
            Item.BeforeAttachmentSave += Item_BeforeAttachmentSave;
            Item.BeforeAttachmentWriteToTempFile += Item_BeforeAttachmentWriteToTempFile;
            Item.BeforeAutoSave += Item_BeforeAutoSave;
            Item.BeforeCheckNames += Item_BeforeCheckNames;
            Item.BeforeDelete += Item_BeforeDelete;
            Item.CustomAction += Item_CustomAction;
            Item.CustomPropertyChange += Item_CustomPropertyChange;
            Item.Open += Item_Open;
            Item.PropertyChange += Item_PropertyChange;
            Item.ReadComplete += Item_ReadComplete;
            Item.Write += Item_Write;
        }
void Item_AfterWrite()
{
    System.Diagnostics.Debug.WriteLine("Id --> " + Item.EntryID); 
}
void Item_Write(ref bool Cancel)
{
    if (!Cancel)
    {                
        System.Diagnostics.Debug.WriteLine("Id --> " + Item.EntryID);
    }
}

Если я попытаюсь проверить событие EntryId в записи, я получу нулевое значение. Если я пытаюсь проверить EntryId в событии After_Write, я получаю сообщение об ошибке:

1 : Ошибка взаимодействия

Итак, мой вопрос: когда и где находится правильное место для получения нового EntryId, назначенного элементу? Спасибо!

1 Ответ

0 голосов
/ 24 марта 2020

Вы можете получить доступ только к Class и MessageClass свойствам в этом событии. Лучше всего включить таймер в обработчике событий (используйте класс Timer из пространства имен Forms, поскольку он использует основной поток). Когда таймер сработает, вы выйдете из обработчика событий и сможете получить доступ к любым MailItem свойствам.

...