このコードを使用して 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
}
ただし、ユーザーがリモート メッセージ (つまり、以前にメール サーバーから取得されていない電子メールの 1 つ) をダウンロードしようとして、要求をキャンセルした場合、私のコードはブロックされたままになり、アクションがキャンセルされたという情報を受け取ることはありません。
私の質問は:
- 上記の回避策は何ですか。アプリケーションが動かなくなりますか?
- アプリケーションをパニックやクラッシュさせないリモートメッセージを開くための非同期呼び出しの実際の例を誰かが提供できますか?
POP3、SMTP、およびローカル IMAP4 メッセージの非同期呼び出しは完全に機能しますが、リモート IMAP4 メッセージはこの問題を引き起こします。
これらの例を S60 第 5 版でテストしています。
よろしくお願いします。