0

我正在使用后台传输下载视频,并且订阅了每个请求的 TransferStatusChanged 和 TransferProgressChanged 事件以监控其状态和下载进度。当我使用 BackgroundTransferService.Remove() 方法取消一个后台传输请求时,它触发了msdn 提到的 TransferStatusChanged 事件。我不想执行事件处理程序,所以我尝试在删除请求之前取消订阅事件,如下面的代码:

BackgroundTransferRequest transferToRemove = BackgroundTransferService.Find(requestId);
if (transferToRemove != null)
{
    transferToRemove.TransferStatusChanged -= transfer_TransferStatusChanged;
    transferToRemove.TransferProgressChanged -= transfer_TransferProgressChanged;
    BackgroundTransferService.Remove(transferToRemove);
}

但是 TransferStatusChanged 事件处理程序仍然被触发。谁能帮我?

4

1 回答 1

0

BackgroundTransferService.Remove(transferToRemove); 只接受请求。删除它需要一些时间。同时,您再次调用 Add() 函数,因此您又获得了一个事件,即 transfer_TransferProgressChanged。

在 transfer_TransferProgressChanged 事件中,首先检查 BackgroundTransferService 是否包含您的请求。

if(BackgroundTransferService.Requests.Contains(m_currentRequest))
{
  BackgroundTransferService.Remove(m_currentRequest);
  UnsubscribeYourEvents();
  DoOtherStuffRealtedToDownload();
}
于 2014-03-18T07:52:24.767 回答