Windows PhoneでのBackgroundTransferRequestのTransferStatusChangedおよびTransfresProgressChangedイベント
-
21-12-2019 - |
質問
私は、ユーザーが資産をダウンロードするオプションがあるアプリを実装しています(画像内の約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スレッドを必要としています。通話関数を別のスレッドに移動したらすぐに、ステータスと進捗変更イベントは予想どおりに発砲し始めました。
他のヒント
それは私が信じる理由ではありません。ハンドラを添付してバックグラウンドサービスに要求を追加しました。バックグラウンドサービスにリクエストを追加する前に、ハンドラを添付する必要があります。
所属していません StackOverflow