Я использовал Redemption (http://dimastr.com/redemption/home.htm) для разработки моей Outlook AddIn. Когда я впервые запускаю GetMessageFromId в STA-потоке (!), Все в порядке, но в следующий раз я получаю MAPI_E_UNKNOWN_ENTRYID.Я получаю MAPI_E_UNKNOWN_ENTRYID, когда GetMessageFromID() в потоке через Redemption
RDOSession rdoSession = null;.
rdoSession = new RDOSession();
if (rdoSession != null)
{
if (!rdoSession.LoggedOn)
rdoSession.Logon(Consts.ProfileName);
if (rdoSession.LoggedOn)
{
for (int c = 1; c <= rdoStoresCnt; c++)
{
/* other code */
RDOMail mail = null;
try
{
mail = rdoSession.GetMessageFromID(entryID);
/* other code */
}
catch (Exception ex)
{
if (mail != null) Marshal.ReleaseComObject(mail); mail = null;
}
finally
{
if (mail != null) Marshal.ReleaseComObject(mail); mail = null;
}
}
}
}
Что я делаю неправильно?
Спасибо за ответ. Но я не могу установить 'RDOSession.MAPIOBJECT' в' Namespace.MAPIOBJECT', потому что он работает в потоке, или я ошибаюсь? –
Спасибо. Использование «RDOStore» при вызове «GetMessageFromId» помогло. –
Устанавливайте свойство MAPIOBJECT, НЕ создавайте новый сеанс внутри своего аддона. Threading будет прекрасно - сохраните значение Namespace.MAPIOBJECT в основном потоке. На вторичном потоке создайте новый экземпляр RDOSession, установите для свойства MAPIOBJECT значение, сохраненное в основном потоке. Таким образом, объект OOM пространства имен никогда не передается между потоками, а только IMAPISession из свойства MAPIOBJECT (что совершенно нормально). –