質問

私は、ユーザーが資産をダウンロードするオプションがあるアプリを実装しています(画像内の約750MBのサイズは約50KBです)。 ユーザーがホームボタンを押すと、SendAsync / GetAsync APIはバックグラウンドで機能しないため、ユーザーがアプリケーションに戻ってきた場合は、常に機能しません。

私の唯一の選択肢は、私が使用しているBackgisterTransferServiceを使用することです。 -

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_transferProgressCangedとBackgroundTransferRequest_transferStatusChangedイベントが呼び出されず、追加のダウンロードのダウンロードキューを解放できません。

助けてください!

ありがとう

役に立ちましたか?

解決

問題は私がUIスレッド上のDownloadImageToSostoreを呼び出していたループを実行していたことです。

転送状態変更と進捗状況変更イベントも、UIスレッドを必要としています。通話関数を別のスレッドに移動したらすぐに、ステータスと進捗変更イベントは予想どおりに発砲し始めました。

他のヒント

それは私が信じる理由ではありません。ハンドラを添付してバックグラウンドサービスに要求を追加しました。バックグラウンドサービスにリクエストを追加する前に、ハンドラを添付する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top