枚举传输队列中的作业

若要从传输队列枚举作业,请调用 IBackgroundCopyManager::EnumJobs 方法。 该方法返回用于枚举队列中的作业的 IEnumBackgroundCopyJobs 接口指针。

若要检索用户的作业,请将 EnumJobs 方法的第一个参数设置为 0。 若要检索队列中的所有作业,请将 EnumJobs 方法的第一个参数设置为BG_JOB_ENUM_ALL_USERS。 只有具有管理员权限的用户才能检索传输队列中的所有作业。

请注意,枚举列表是调用 EnumJobs 方法时传输队列中作业的快照。 但是,这些作业的属性值反映作业的当前值。

如果要检索单个传输作业,请调用 IBackgroundCopyManager::GetJob 方法。

若要枚举作业中的文件,请参阅 枚举作业中的文件

以下示例演示如何枚举传输队列中的作业。 示例中的g_XferManager变量是 IBackgroundCopyManager 接口指针。 有关如何创建 IBackgroundCopyManager 接口指针的详细信息,请参阅 “连接到 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;
}