我取消订阅后如何禁用BackgroundTransferRequest的TransferStatusChanged事件处理程序?

时间:2013-05-15 07:15:49

标签: windows-phone-7 windows-phone-8 windows-phone-7.1 windows-phone

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

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

但TransferStatusChanged事件处理程序仍然被触发。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

BackgroundTransferService.Remove(transferToRemove);仅接受请求。删除它需要一些时间。同时,你再次调用Add()函数,因此你还有一个事件,即transfer_TransferProgressChanged。

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

if(BackgroundTransferService.Requests.Contains(m_currentRequest))
{
  BackgroundTransferService.Remove(m_currentRequest);
  UnsubscribeYourEvents();
  DoOtherStuffRealtedToDownload();
}