- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
使用 IProgress<T>
时报告进度,应该是
IProgress<T>
请注意,进度报告的频率可能高于其呈现此进度的合理方式。问题的上下文是我有一些使用 IProgress<T>
的代码报告进度,并且它以非常高的速度报告进度。我想用 UI 进度条显示进度。如果我使用提供的 Progress<T>
实现(将进度发布到 UI SyncronizationContext),然后它会导致 UI 无响应(即发送到消息队列的消息太多,用户甚至无法单击对话框上的“取消”按钮)。
所以,
IProgress<T>
怎么办?只是将进度写入日志文件的实现(并且可以处理高报告频率)。 -或者-IProgress<T>
来解决这个问题实现限制了我处理/报告进度的频率。据推测,此实现将记录非 UI 线程上的最新进度,然后(可能)UI 将根据计时器进行更新。最佳答案
编写一个装饰器来限制调用。这样您就可以将节流逻辑与实际报告分开,您可以将其用于任何其他 IProgress<T>
实现。
当你想限制进度报告时使用这个装饰器。用下面类的实例简单地包装你的进度报告器。
我已将节流逻辑留给您。您可以使其基于时间、通话量或其他一些标准。
public class ProgressThrottler<T>: IProgress<T> {
public ProgressThrottler(IProgress<T> progress) {
_progress = progress ?? throw new ArgumentNullException("progress");
}
private readonly IProgress<T> _progress;
public void Report(T value) {
// Throttles the amount of calls
bool reportProgressAfterThrottling = ...;
if (reportProgressAfterThrottling) {
_progress.Report(value);
}
}
}
关于c# - IProgress<T> 多久报告一次进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19661194/
我有一个异步方法 DoStuffAsync用 Task.Run 产生两个任务, 并且两个任务都使用单个 IProgress 报告它们的进度目的。从用户的角度来看,只有一个操作,因此显示两个进度条(每个
我已经成功实现了 Task在我的类 UpdateManager 中,它从我的网络空间下载文件。 public async Task DownloadPackageTask(IProgress prog
我有以下代码片段: var progress = new Progress(); var count = 0; progress.ProgressChanged += (o, transferProg
我正在通过 IProgress 和 Report 方法更新我的 UI。我做类似的事情 IProgress p = new Progress(ReportProgress); Task task = T
我在 C# 中有以下内容 public static void Main() { var result = Foo(new Progress(i => Console.Writ
使用 IProgress 时报告进度,应该是 代码报告进度的责任是将其进度报告的频率限制在“合理”的范围内,-或- 具体执行责任IProgress请注意,进度报告的频率可能高于其呈现此进度的合理方式。
我遵循以下描述的模式:https://blogs.msdn.microsoft.com/dotnet/2012/06/06/async-in-4-5-enabling-progress-and-can
所有,我有一项昂贵的任务,我使用 async 进行/await .NET4.5 下的关键字。我通过 Progress 从后台线程报告进度类(class)。 我传入的对象IProgress因为类型是 P
考虑以下实现,一个方法接受 IProgress , 迭代超过 10000 个对象。 numbers array 变量返回 10000 个对象,但是 IProgress仅报告 9970 - 9980 个
我正在使用基于任务的异步模式 (TAP) 执行一些长任务,使用 IProgress向主 UI 报告进度。Progress.Report似乎只有在它之前有另一个等待任务时才有效。例如,如果我在内联 fo
我一直在尝试创建一个可重复使用的模式进度窗口(即 progressForm.ShowDialog())来显示正在运行的异步任务的进度,包括启用取消。 我已经看到一些实现通过 Hook 表单上的 Act
我注意到以下行为。由 IProgress 填充时,控制台输出消息出现在错误的文件夹中。 var recounter = new IdRecounter(filePath, new Progress(C
全部,我有一个调用IProgress.Report();的方法更新我的用户界面并进行相关数据选择。后台线程随后通过一个与之一起工作的接口(interface)获取当前选择(在 UI 上)。因此,重要的
我有一个控制台应用程序,它使用类库来执行一些长时间运行的任务。这是一个 .net 核心控制台应用程序并使用 .net 核心通用主机。我也用 ShellProgressBar显示一些进度条的库。 我的托
是否有一些较旧的 .NET 4.0 等同于 IProgress 的接口(interface)或类? (仅适用于 .NET 4.5)可用于将进度从任务发送到 UI? 或者我应该为它编写自己的类/接口(i
考虑到 Async CTP 通过环境 SynchronizationContext 促进隐式调度,有什么理由不让我的 CancellationToken 和 IProgress 环境也是? 我目前正在
我正在使用分三步完成的异步操作,在完成之前返回部分结果。最初它使用事件来表示进度,我想将其正确包装为 await能够操作(或它们的链)。 确切地说,它是 Windows Phone 7 中的 Phot
我有一个 Hub 类,它有一个长时间运行的方法,我需要在它工作时显示一个进度条。 我读了this article我认为可以在异步方法中使用 IProgress 接口(interface)来发送长时间运
我有一个 Hub 类,它有一个长时间运行的方法,我需要在它工作时显示一个进度条。 我读了this article我认为可以在异步方法中使用 IProgress 接口(interface)来发送长时间运
我正在使用 jupyter notebook 并安装 ipywidgets==7.4.2 widgetsnbextension pandas-profiling=='.0.0 我也跑了: !jupyt
我是一名优秀的程序员,十分优秀!