我一直在使用此代码显示IMAP4消息:
void DisplayMessageL( const TMsvId &aId )
{
// 1. construct the client MTM
TMsvEntry indexEntry;
TMsvId serviceId;
User::LeaveIfError( iMsvSession->GetEntry(aId, serviceId, indexEntry));
CBaseMtm* mtm = iClientReg->NewMtmL(indexEntry.iMtm);
CleanupStack::PushL(mtm);
// 2. construct the user interface MTM
CBaseMtmUi* uiMtm = iUiReg->NewMtmUiL(*mtm);
CleanupStack::PushL(uiMtm);
// 3. display the message
uiMtm->BaseMtm().SwitchCurrentEntryL(indexEntry.Id());
CMsvOperationWait* waiter=CMsvOperationWait::NewLC();
waiter->Start(); //we use synchronous waiter
CMsvOperation* op = uiMtm->OpenL(waiter->iStatus);
CleanupStack::PushL(op);
CActiveScheduler::Start();
// 4. cleanup for example even members
CleanupStack::PopAndDestroy(4); // op,waiter, mtm, uimtm
}
但是,如果用户尝试下载远程邮件(即之前未从邮件服务器检索到的电子邮件之一),然后取消请求,我的代码仍会被阻止,并且它永远不会收到有关该操作的信息取消。
我的问题是:
POP3,SMTP和本地IMAP4消息的异步调用可以正常工作,但远程IMAP4消息会产生此问题。
我正在测试S60第5版的这些示例。
提前谢谢大家。
答案 0 :(得分:0)
首先,我会重试删除CMsvOperationWait
并异步处理打开的请求 - 即让一个活动对象等待CMsvOperation完成。
CMsvOperationWait
只是方便使异步操作看起来是同步的,我怀疑这是罪魁祸首 - 在download-> show message的情况下,链接有两个异步操作。