Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az alkalmazásban kétféle hiba kezelhető. Az első hiba egy sikertelen metódushívás. Minden metódus egy HRESULT értéket ad vissza. Az egyes metódusok referenciaoldala azonosítja azokat a visszatérési értékeket, amelyeket a legnagyobb valószínűséggel generál. További visszatérési értékekért lásd BITS visszatérési értékeket. A visszatérési értékhez társított üzenetszöveg lekéréséhez hívja meg a IBackgroundCopyManager::GetErrorDescription metódust.
A második kezelendő hibátípus egy olyan feladat, amelynek a állapota átvált BG_JOB_STATE_ERROR vagy BG_JOB_STATE_TRANSIENT_ERRORállapotba. Az ilyen típusú hibákkal kapcsolatos információk lekéréséhez hívja meg a feladat IBackgroundCopyJob::GetError metódust. A metódus egy IBackgroundCopyError felületmutatót ad vissza, amely a hiba okának meghatározásához használt adatokat tartalmazza. Hibaértesítést is kaphat, ha regisztrál az eseményértesítés fogadására. Részletekért lásd: COM-visszahívás regisztrálása.
A BITS minden feladatot úgy tekint, mint ami atomi. Ha a feladat egyik fájlja hibát okoz, a feladat hibaállapotban marad, amíg meg nem oldja a hibát. Így nem törölheti a hibát okozó fájlt a feladatból. Ha azonban a hibát a kiszolgáló nem érhető el, vagy érvénytelen távoli fájl okozza, meghívhatja a IBackgroundCopyJob3::ReplaceRemotePrefix vagy IBackgroundCopyFile2::SetRemoteName metódust egy új kiszolgáló vagy fájlnév azonosításához.
A hiba okának meghatározása után hajtsa végre az alábbi lehetőségek egyikét:
- A feladat megszakításához hívja meg a IBackgroundCopyJob::Cancel metódust.
- Letöltési feladat esetén hívja meg a IBackgroundCopyJob::Complete metódust a hiba bekövetkezése előtt sikeresen átvitt fájlok mentéséhez.
- Javítsa ki a hibát, és hívja meg a IBackgroundCopyJob::Resume metódust a feladat befejezéséhez.
Feltöltési-válaszfeladat esetén ellenőrizze a BytesTotalBG_JOB_REPLY_PROGRESS-struktúra tagjának értékét annak megállapításához, hogy a hiba a feladat feltöltési vagy válaszrészén történt-e. Hiba történt a feltöltéskor, ha az érték BG_SIZE_UNKNOWN.
Az alábbi példa bemutatja, hogyan kérhet le egy IBackgroundCopyError felületmutatót. A példa feltételezi, hogy az IBackgroundCopyJob felület mutatója érvényes.
HRESULT hr = 0;
HRESULT hrError = 0;
IBackgroundCopyJob* pJob;
IBackgroundCopyError* pError = NULL;
IBackgroundCopyFile* pFile = NULL;
WCHAR* pszDescription = NULL;
WCHAR* pszRemoteName = NULL;
BG_ERROR_CONTEXT Context;
hr = pJob->GetError(&pError);
if (SUCCEEDED(hr))
{
//Retrieve the HRESULT associated with the error. The context tells you
//where the error occurred, for example, in the transport, queue manager, the
//local file, or the remote file.
pError->GetError(&Context, &hrError);
//Retrieve a description associated with the HRESULT value.
hr = pError->GetErrorDescription(LANGIDFROMLCID(GetThreadLocale()), &pszDescription);
if (SUCCEEDED(hr))
{
if (BG_ERROR_CONTEXT_REMOTE_FILE == Context)
{
hr = pError->GetFile(&pFile);
if (SUCCEEDED(hr))
{
hr = pFile->GetRemoteName(&pszRemoteName);
if (SUCCEEDED(hr))
{
//Do something with the information.
CoTaskMemFree(pszRemoteName);
}
pFile->Release();
}
}
CoTaskMemFree(pszDescription);
}
pError->Release();
}
else
{
//Error information is not available.
}