IProgress<T>
進捗状況を報告するために使用する場合、
- 進行状況を報告するコードの責任は、その進行状況報告を「妥当な」頻度に制限する、または
IProgress<T>
進捗状況の報告が、この進捗状況を提示する方法として妥当な頻度よりも高い頻度で行われる可能性があることに注意することは、特定の実装の責任です。
IProgress<T>
質問の文脈は、進行状況を報告するために使用するコードがいくつかあり、進行状況を非常に高い速度で報告することです。UIプログレスバーで進行状況を表示したい。提供されたProgress<T>
実装 (進行状況を UI SyncronizationContext にポストする) を使用すると、UI が応答しなくなります (つまり、メッセージ キューに送信されるメッセージが多すぎるため、ユーザーは [キャンセル] ボタンをクリックすることさえできません)。ダイアログで)。
そう、
- 報告を減らすことでこれを修正できますが、進行状況をログ ファイルに書き込むだけの実装があったとしたらどうでしょう
IProgress<T>
(そして、高い報告頻度を処理できます)。-また- IProgress<T>
進行状況を処理/報告する頻度を制限する独自の特定の実装を作成することで、これを修正できました。おそらく、この実装は非 UI スレッドで最新の進行状況を記録し、(おそらく) タイマーに基づいて UI を更新します。