如何显示远程电子邮件?

时间:2010-02-05 00:52:25

标签: c++ mobile symbian nokia s60

我一直在使用此代码显示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版的这些示例。

提前谢谢大家。

1 个答案:

答案 0 :(得分:0)

首先,我会重试删除CMsvOperationWait并异步处理打开的请求 - 即让一个活动对象等待CMsvOperation完成。

CMsvOperationWait只是方便使异步操作看起来是同步的,我怀疑这是罪魁祸首 - 在download-> show message的情况下,链接有两个异步操作。