我是一个很长时间的Redemption编码器,有几个应用程序在后台线程上使用Redemption(但到目前为止还没有使用RDOFolderSynchronizer)。
我在backgroundworker线程上创建了一个新的rSession对象,我传递了MAPI对象。
RedemptionCode rCodeBW = new RedemptionCode();
rCodeBW.InitialiseRedemption(Globals.MapiObject, true);
在后台线程上我试图使用RDOFolderSynchronizer,但是当我运行它时,我在尝试检索同步项时遇到错误。错误是:
IMAPIFolder.OpenProperty(PR_CONTENTS_SYNCHRONIZER)返回MAPI_E_INTERFACE_NOT_SUPPORTED 只有在线模式下的Exchange文件夹才支持同步。
如果我在主线程中运行相同的代码,它运行正常,所以我认为''在线模式'问题不是它失败的直接原因。
我使用的代码是:
var MAPI_NO_CACHE = 0x200;
var MAPI_BEST_ACCESS = 0x10;
RDOFolder2 rFolder2 = rSession.GetFolderFromID(entryID, storeID, MAPI_NO_CACHE ^ MAPI_BEST_ACCESS) as RDOFolder2;
RDOFolderSynchronizer synchronizer = rFolder2.ExchangeSynchronizer;
RDOSyncMessagesCollection syncItems = synchronizer.SyncItems(Globals.UserSettings.LastSyncDataEmailInbox);
感激地收到任何建议。
答案 0 :(得分:1)
是的,该接口必须在创建父MAPI会话(IMAPISession
)的同一线程上使用。它是扩展MAPI中的ICS API限制。