C# 从任务设置WPF ProgressBar最大值
通过使用Progress实例,从任务中更新.NET ProgressBar值很容易:C# 从任务设置WPF ProgressBar最大值,c#,.net,wpf,C#,.net,Wpf,通过使用Progress实例,从任务中更新.NET ProgressBar值很容易: IProgress<int> progress = new Progress<int>(_ => progressBar.Value = _); int result = await Task.Run(() => Method(progress)); 但是如何设置任务的最大进度条?解决方案很明显,但由于时间太晚,我错过了: public class ProgressData
IProgress<int> progress = new Progress<int>(_ => progressBar.Value = _);
int result = await Task.Run(() => Method(progress));
但是如何设置任务的最大进度条?解决方案很明显,但由于时间太晚,我错过了:
public class ProgressData
{
public int Value { get; set; }
public int Maximum { get; set; }
}
及
从中,是否要将最大值设置为进度条,但不知道方法中的最大值是多少?@Julianzapa只有在任务的方法开始执行后,才能知道最大值。在运行任务之前,我不知道它将是什么。好的,我不知道您到底想做什么,但您可以将其转换为100,并假设这是您的最大值,然后在方法中进行计算以报告进度。在方法内部,计算将是max*100/**progress**,其中max是方法内部已知的最大值,并将结果传递给progress.Reportresult。@julianzapata我已经找到了解决方案。马上发帖。@Julianzapa你在干什么?将进度转换为百分比将消除他在进度开始之前不知道最大进度值的问题。如果是百分比,ProgressBar.最大值将始终为“100”。公式为:progressValue*100/maxValue=percentageValue。但由于ProgressBar.Maximum的默认值为“1”,最简单的方法是使用简单的十进制表示法:progressValue/maxValue=decimalValue。次要建议:使用struct而不是class。值类型避免了大量需要GC的小实例,并强制执行IProgress.Report的复制,而不是重用要求。另外,我建议你取得进展。报告。。。因此,进度可以为空。
public class ProgressData
{
public int Value { get; set; }
public int Maximum { get; set; }
}
public void ReportProgress(ProgressData progressData)
{
progressBar.Value = progressData.Value;
progressBar.Maximum = progressData.Maximum
}
IProgress<ProgressData> progress = new Progress<ProgressData>(ReportProgress);
int result = await Task.Run(() => Method(progress));
private int Method(IProgress<ProgressData> progress) {
...
progress.Report(new ProgressData { Value = 1, Maximum = 10 });
...
}