UIに関連したアップロードとダウンロードファイル(写真など)、について対応するAPIで提供プログレスバー、C#のSystem.IProgressを表示します。
名前空間のシステム { // // 概要: // プロバイダ更新の定義された進展。 // // 型パラメータ: // T: // 進歩は型の値を更新します。引数このタイプのインバータです。すなわち、指定された下部タイプまたは派生型の使用。共変とインバータの詳細については、共分散とジェネリックを参照してください。 パブリック インターフェイス <IProgress で T> { // // 概要: // レポートの進捗状況。 // // パラメータ: // 値: // 進行状況の更新後の値。 無効レポート(T値); } }
コードの関連する使用があるように、複数のファイルについては、使用することは、まだ非常に良い選択です。
1 非同期タスク< INT > UploadPicturesAsync(一覧< オブジェクト >イメージリスト、IProgress < INT > 進捗、CancellationTokenのCT) 2 { 3 試み 4 { 5 INT totalCountプロパティ= imageList.Count。 6 INT processCount = 待つ Task.Run < 整数 >(()=> 7 { 8 INT tempCount = 0 ; 9 foreachの(VARの画像にイメージリスト) 10 { 11 //は、ここでの処理とアップロードロジックを待つ 12 // INT処理は= UploadAndProcessAsync(画像)を待ちます。 13 // 异步上传/下载方法 14の ブール成功= Task.Run(非同期()=> 15 { 16は 待つ Task.Delay(2000 ); 17 戻り image.ToString()== " 取消"?偽:真、 18 })。結果; 19 もし(ct.IsCancellationRequested) // 判断是否取消 20 { 21 ct.ThrowIfCancellationRequested()。 22 } 23 場合(進行!= NULL ) 24 { 25 progress.Report((tempCount * 100 / totalCountプロパティ))。 26 } 27 tempCount ++ 。 28 } 29 30 リターンtempCount。 31 }); 32 戻りprocessCount; 33である } 34は、 キャッチ(OperationCanceledException EX) 35 { 36 投EX; 37 } 38である } 39 //がキャンセルされる送信信号System.Threading.CancellationToken 40 // cts.Tokenが情報を発信キャンセルされなければなりません通知動作。 41は CancellationTokenSource CTS = 新しい新しいCancellationTokenSource(); 42である /// <まとめ> 43である /// プログレスバーが非同期非同期アップロードボタンアップロード 44である /// </要約> 45 公共 非同期 無効にProgressBar() 46は 、{ 47 // <T>の進捗状況を構築し、アクション<T> AS ReportProgressザ・を渡して 48の // 呼び出しごとの進捗状況に関する進捗報告書は、コールバック値を提供 49 のvar progressIndicator = 新しい新しい進歩は< 整数 > (ReportProgress); 50 //はコール非同期メソッド 51は // アナログアップロード/ダウンロードファイル 52が 一覧< オブジェクト > =ファイル新しい新しいリスト< オブジェクト > 53である { 54である 。1、2、" 取消"、3、4、5、2、4、11 55 }。 56 試みる 57 { 58件 のint =はアップロード待つUploadPicturesAsync(ファイル、progressIndicator、cts.Token)を、 59 Console.WriteLineを($ " アップロードカウント=> {アップロード} " ); 60 } 61 キャッチ(OperationCanceledExceptionのEX) 62 { 63 Console.WriteLineを($ "アップロードキャンセル:ex.Message {} " ); 64 } 65 } 66 /// <まとめ> 67 /// UIスレッドの対話 68 /// </要約> 69 /// <PARAM名="値「> </ PARAM> 70 空隙 ReportProgress(INTの値) 71である { 72 // UIスレッドが情報表示進行 73は Console.WriteLineを($ " {値}%" ); 74 IF(値== 33である) // アナログキャンセルボタン処理 75 { 76 cts.Cancel()。 77 } 78 //が戻される進捗値を反映するようにUIを更新します。 79 }
参考:https://devblogs.microsoft.com/dotnet/async-in-4-5-enabling-progress-and-cancellation-in-async-apis/