Windows Phone에서 BackgroundTransferRequest의 TransferStatusChanged 및 TransferProgressChanged 이벤트
-
21-12-2019 - |
문제
사용자가 자산을 다운로드하는 옵션 (이미지에서 약 750MB, 각각은 50KB 크기의 이미지에서 약 750MB)을 구현하고 있습니다. 사용자가 홈 버튼을 누르면 SendAsync / GetAsync API가 사용자가 응용 프로그램으로 되돌아 가면 백그라운드에서 작동하지 않으므로이 작업을 수행 할 수 없습니다.
내 유일한 옵션은 다음과 같이 사용중인 BackgroundTransferService를 사용하는 것입니다. -
for(...)//calling the download function here
DownloadImageToIsoStore(planImageUri, cemetery_id + "_plan_1.gif", countryName);
public void DownloadImageToIsoStore(Uri imageUri, string imageName,string countryName)
{
while ((BackgroundTransferService.Requests.Count()) >= 25) { Thread.Sleep(100); }//do not add if count is 25 since that is the limit. added this to wait till space frees up in the queue
BackgroundTransferRequest backgroundTransferRequest = new BackgroundTransferRequest(imageUri);
backgroundTransferRequest.Method = "GET";
backgroundTransferRequest.DownloadLocation = new Uri("shared/transfers/" + imageName, UriKind.RelativeOrAbsolute);//shared/transfers is the required directory
backgroundTransferRequest.Tag = countryName;//will check this when download is completed
backgroundTransferRequest.TransferPreferences = TransferPreferences.AllowCellularAndBattery;
BackgroundTransferService.Add(backgroundTransferRequest);
backgroundTransferRequest.TransferStatusChanged += new EventHandler<BackgroundTransferEventArgs>(backgroundTransferRequest_TransferStatusChanged);
backgroundTransferRequest.TransferProgressChanged += new EventHandler<BackgroundTransferEventArgs>(backgroundTransferRequest_TransferProgressChanged);
}
void backgroundTransferRequest_TransferProgressChanged(object sender, BackgroundTransferEventArgs e)
{
long bytes = e.Request.BytesReceived;
Debug.WriteLine(bytes);
}
void backgroundTransferRequest_TransferStatusChanged(object sender, BackgroundTransferEventArgs e)
{
BackgroundTransferRequest backgroundTransferRequest = e.Request;
BackgroundTransferService.Remove(backgroundTransferRequest);
}
.
다운로드가 성공적으로 완료되었지만 어떤 이유로, backgroundtransferrequest_transferProgressChanged 및 backgroundtransferrequest_transferstatusChanged 이벤트가 호출되지 않고 추가 다운로드를 위해 다운로드 대기열을 확보 할 수 없습니다.
도와주세요!
감사합니다
해결책
문제는 UI 스레드에서 DownloadImagetoisostore를 호출 한 루프를 실행 중임을 잇 었는가?
전송 상태가 변경되었고 진행되는 이벤트는 또한 UI 스레드가 필요합니다.호출 함수를 별도의 스레드로 옮기 자마자 상태 및 진행 변경 이벤트가 예상대로 발사를 시작했습니다.
다른 팁
그것은 내가 믿는 이유가 아닙니다.핸들러를 첨부하여 백그라운드 서비스에 요청을 추가했습니다.핸들러는 백그라운드 서비스에 요청을 추가하기 전에 첨부되어야합니다.
제휴하지 않습니다 StackOverflow