2016-07-12 8 views
1

私はUWPアプリでインターネット経由でファイルをダウンロードしています。 BackgroundDownloaderクラスを使用してバックグラウンドでダウンロードします。ここに私のコードの一部です。DownloadOperationをProgressChangedイベントをより頻繁に呼び出す方法

public BackgroundDownloader backgroundDownloader = new BackgroundDownloader(); 
DownloadOperation downloadOperation = backgroundDownloader.CreateDownload(source, file); 
Progress<DownloadOperation> progress = new Progress<DownloadOperation>(progressChanged); 
CancellationTokenSource cancellationToken = new CancellationTokenSource(); 
await downloadOperation.StartAsync().AsTask(cancellationToken.Token, progress); 

すべて正常に動作しますが、奇妙な動作が発生します。 UIを通知および更新するprogressChangedメソッドのデータモデルを更新します。しかし、ファイルをダウンロードするとき、progressChangedイベントは約1MBのファイルが低速のインターネット接続でダウンロードされ、ダウンロードを一時停止してから再開すると数KBごとにそのイベントが発生します。 ProgressChangedイベントがどのくらいの頻度で発生するかを設定する手段があることを知りたい。私はインターネットを検索しましたが、何も見つかりませんでした。助けてください。

答えて

1

フィードバックいただきありがとうございます。私は私の側で同様の行動を見ることができます。ダウンロード操作を一時停止してから再開すると、progressChangedハンドラが頻繁に呼び出されます。ただし、進行中のコールバックが呼び出された頻度をAPIで制御することはできません。 Progress<DownloadOperation>コンストラクタで設定されたハンドラは、Windowsランタイムメソッドが進行通知を報告するたびに呼び出されます。しかし、この実装は基本的なものであり、制御できません。

頻度を増やしたい場合は、醜い回避策が、ダウンロード操作を最初に開始したときにコードの中で一時停止して再開することがあります。たとえば、最初に開始したダウンロード操作を識別するフラグを追加できます。

private bool firstStart = true; 

さらに、progressChangedハンドラで、ダウンロード操作を一時停止してから再開してください。

if (firstStart && currentProgress.Status == BackgroundTransferStatus.Running) 
{ 
    download.Pause(); 
    await Task.Delay(100); 
    download.Resume(); 
    firstStart = false; 
} 

これは良い習慣ではなく、この問題は社内で報告しています。私は一度どんな進歩があっても私の答えを更新します。

+0

ありがとうございます。リンクが最初の応答後に期限切れになるため、ダウンロードを再開することができない場合がありますので、今は問題が修正されるまで待つことにします。 –

関連する問題