我正在使用后台传输来下载视频,我订阅了每个请求的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事件处理程序仍然被触发。任何人都可以帮助我吗?
答案 0 :(得分:0)
BackgroundTransferService.Remove(transferToRemove);仅接受请求。删除它需要一些时间。同时,你再次调用Add()函数,因此你还有一个事件,即transfer_TransferProgressChanged。
在事件transfer_TransferProgressChanged中,首先检查BackgroundTransferService是否包含您的请求。
if(BackgroundTransferService.Requests.Contains(m_currentRequest))
{
BackgroundTransferService.Remove(m_currentRequest);
UnsubscribeYourEvents();
DoOtherStuffRealtedToDownload();
}