Compartir a través de


Enumeración de trabajos en la cola de transferencia

Para enumerar los trabajos de la cola de transferencia, llame al método IBackgroundCopyManager::EnumJobs . El método devuelve un puntero de interfaz IEnumBackgroundCopyJobs que se usa para enumerar los trabajos de la cola.

Para recuperar los trabajos del usuario, establezca el primer parámetro del método EnumJobs en 0. Para recuperar todos los trabajos de la cola, establezca el primer parámetro del método EnumJobs en BG_JOB_ENUM_ALL_USERS. Solo los usuarios con privilegios de administrador pueden recuperar todos los trabajos de la cola de transferencia.

Tenga en cuenta que la lista enumerada es una instantánea de los trabajos de la cola de transferencia en el momento en que se llama al método EnumJobs . Sin embargo, los valores de propiedad de esos trabajos reflejan los valores actuales del trabajo.

Si desea recuperar trabajos de transferencia individuales, llame al método IBackgroundCopyManager::GetJob .

Para enumerar archivos en un trabajo, vea Enumerar archivos en un trabajo.

En el ejemplo siguiente se muestra cómo enumerar trabajos en la cola de transferencia. La variable g_XferManager del ejemplo es un puntero de interfaz IBackgroundCopyManager . Para obtener más información sobre cómo crear el puntero de interfaz IBackgroundCopyManager , consulte Conexión al servicio BITS.

HRESULT hr = 0;
IEnumBackgroundCopyJobs* pJobs = NULL;
IBackgroundCopyJob* pJob = NULL;
ULONG cJobCount = 0;
ULONG idx = 0;

//This example enumerates all jobs in the transfer queue. This call fails if the 
//current user does not have administrator privileges. To enumerate jobs for only 
//the current user, replace BG_JOB_ENUM_ALL_USERS with 0.
hr = g_XferManager->EnumJobs(BG_JOB_ENUM_ALL_USERS, &pJobs);
if (SUCCEEDED(hr))
{
  //Get the count of jobs in the queue. 
  pJobs->GetCount(&cJobCount);

  //Enumerate the jobs in the queue.
  for (idx=0; idx<cJobCount; idx++)
  {
    hr = pJobs->Next(1, &pJob, NULL);
    if (S_OK == hr)
    {
      //Retrieve or set job properties.

      pJob->Release();
      pJob = NULL;
    }
    else
    {
      //Handle error
      break;
    }
  }

  pJobs->Release();
  pJobs = NULL;
}