- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 C# 中有以下内容
public static void Main()
{
var result = Foo(new Progress<int>(i =>
Console.WriteLine("Progress: " + i)));
Console.WriteLine("Result: " + result);
Console.ReadLine();
}
static int Foo(IProgress<int> progress)
{
for (int i = 0; i < 10; i++)
progress.Report(i);
return 1001;
}
Main 的一些输出是:
第一次运行:
Result: 1001
Progress: 4
Progress: 6
Progress: 7
Progress: 8
Progress: 9
Progress: 3
Progress: 0
Progress: 1
Progress: 5
Progress: 2
第二次运行:
Progress: 4
Progress: 5
Progress: 6
Progress: 7
Progress: 8
Progress: 9
Progress: 0
Progress: 1
Progress: 2
Result: 1001
Progress: 3
等...
每次运行,输出都是不同的。我如何才能同步这些方法,以便按照报告 0,1,...9 的顺序显示进度,然后是结果 1001。我希望输出如下所示:
Progress: 0
.
.
.
Progress: 9
Result: 1001
最佳答案
Progress<> 类使用 SynchronizationContext.Current 属性来 Post() 进度更新。这样做是为了确保 ProgressChanged 事件在程序的 UI 线程上触发,以便更新 UI 是安全的。需要安全地更新 ProgressBar.Value 属性。
控制台模式应用程序的问题在于它没有同步提供程序。不像 Winforms 或 WPF 应用程序。 Synchronization.Current 属性具有默认提供程序,其 Post() 方法在线程池线程上运行。在没有任何互锁的情况下,哪个 TP 线程首先报告其更新是完全不可预测的。也没有什么好的联锁方式。
只是不要在这里使用 Progress 类,没有意义。您在控制台模式应用程序中没有 UI 线程安全问题,Console 类已经是线程安全的。修复:
static int Foo()
{
for (int i = 0; i < 10; i++)
Console.WriteLine("Progress: {0}", i);
return 1001;
}
关于c# - IProgress<T> 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17982555/
我有一个异步方法 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
我是一名优秀的程序员,十分优秀!