调用加载函数时,我可以在后台进程中运行Outlook附加方法吗?

时间:2019-01-01 09:24:25

标签: c# .net multithreading outlook-addin

  

这是我的代码   有两种方法,一种是通知邮件,它在收到新邮件时调用   外表。第二种方法是mailProcessTrigger它执行一些   更改邮件。我想运行 mailProcessTrigger()方法   另一个   线程,它每5分钟调用一次。我无法采用这种方法   多线程。

namespace PhishCOP
    {
        public partial class Phishing
        {
            Outlook.Application outlookApp;
            Outlook.MAPIFolder deleterFolder = null;
            Outlook.Items mailItems = null;
            Outlook.MAPIFolder inboxFolder = null;
            Outlook.Items items;
            string SchemaTransportHeader = @"http://schemas.microsoft.com/mapi/proptag/0x007D001E";
            const string PR_ATTACH_DATA_BIN = "http://schemas.microsoft.com/mapi/proptag/0x37010102";

    private void Phishing_Load(object sender, RibbonUIEventArgs e)
        {
            outlookApp = new Outlook.Application();
            inboxFolder = outlookApp.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
            deleterFolder = outlookApp.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderJunk);
            mailItems = inboxFolder.Items;//.Restrict("[Unread]=true");
            mailItems.Sort("[ReceivedTime]", true);
            AddACategory();
            items = inboxFolder.Items;

            items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(CallFunction);

           }


        private void CallFunction(object data)
        {
           //move mail to another folder
        }

        private void mailProcessTrigger()
        {
        //mail process
        }
   }
}

1 个答案:

答案 0 :(得分:2)

Outlook对象模型中的项目不能在后台线程中使用,这将导致加载项不稳定,并可能导致加载项和Outlook崩溃。您只能将Extended MAPI与C ++或Redemption一起使用,以运行多线程Outlook解决方案。