문제

사용자가 자산을 다운로드하는 옵션 (이미지에서 약 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 스레드가 필요합니다.호출 함수를 별도의 스레드로 옮기 자마자 상태 및 진행 변경 이벤트가 예상대로 발사를 시작했습니다.

다른 팁

그것은 내가 믿는 이유가 아닙니다.핸들러를 첨부하여 백그라운드 서비스에 요청을 추가했습니다.핸들러는 백그라운드 서비스에 요청을 추가하기 전에 첨부되어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top