Поток пользовательского интерфейса Outlook блокируется при преобразовании сообщений в eml с помощью погашения Outlook

Поток пользовательского интерфейса Outlook блокируется при конвертации сообщения в eml с помощью выкупа

Я разрабатываю надстройку для Outlook для синхронизации электронной почты на сервере как eml. Когда надстройка запускается, она запускает таймер и проверяет наличие новых писем, а затем загружает их. Для каждого письма я буду конвертировать их в eml, используя outlook Redemption. Это работает, но я обнаружил, что во время конвертации пользовательский интерфейс Outlook будет заблокирован. Я использую следующий код, чтобы сделать преобразование. Я также попробовал RDOSession.GetMessageFromID(mail.EntryID). Это то же самое. Кто-нибудь

public static string ToEmlFile(this Outlook.MailItem mail)
        {
            var msgFilename = Path.ChangeExtension(Path.GetTempFileName(), ".msg");
            mail.SaveAs(msgFilename);

            var item = RDOSessionMgr.GetInstance().GetMessageFromMsgFile(msgFilename);
            var emlFilename = Path.ChangeExtension(Path.GetTempFileName(), ".eml");
            item.SaveAs(emlFilename, Redemption.rdoSaveAsType.olRFC822);

            return emlFilename;
        }

 public class RDOSessionMgr
    {
        private static Redemption.RDOSession _session;

        static RDOSessionMgr()
        {
            _session = new Redemption.RDOSession();
            _session.Logon(Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        }

        public static Redemption.RDOSession GetInstance()
        {
            return _session;
        }
    }

1 ответ

Вы должны иметь возможность запускать этот код во вторичном потоке - сохраните значение свойства Application.Session.MAPIOBJECT в глобальной переменной / классе, а затем присвойте это значение свойству RDOSession.MAPIOBJECT объекта RDOSession, который вы создаете в вторичная нить.

В связанной заметке вы также можете использовать эту технику в основном потоке - нет никаких причин для RDOSession.LOgon из надстройки Outlook, поскольку у вас уже есть сеанс MAPI, используемый Outlook.

Другие вопросы по тегам