gpt4 book ai didi

c# - Progress 没有报告功能

转载 作者:可可西里 更新时间:2023-11-01 07:54:26 27 4
gpt4 key购买 nike

我有 Windows 窗体应用,这是我的代码:

  private async void btnGo_Click(object sender, EventArgs e)
{
Progress<string> labelVal = new Progress<string>(a => labelValue.Text = a);
Progress<int> progressPercentage = new Progress<int>(b => progressBar1.Value = b);

// MakeActionAsync(labelVal, progressPercentage);
await Task.Factory.StartNew(()=>MakeActionAsync(labelVal,progressPercentage));
MessageBox.Show("Action completed");
}

private void MakeActionAsync(Progress<string> labelVal, Progress<int> progressPercentage)
{
int numberOfIterations=1000;
for(int i=0;i<numberOfIterations;i++)
{
Thread.Sleep(10);
labelVal.Report(i.ToString());
progressPercentage.Report(i*100/numberOfIterations+1);
}
}

我收到编译错误“System.Progress”不包含“Report”的定义,并且找不到接受“System.Progress”类型的第一个参数的扩展方法“Report”(您是否缺少 using 指令或程序集引用?)”

但是如果您查看 Progress 类:

public class Progress<T> : IProgress<T>

IProgress 接口(interface)有函数 Report:

  public interface IProgress<in T>
{
// Summary:
// Reports a progress update.
//
// Parameters:
// value:
// The value of the updated progress.
void Report(T value);
}

我错过了什么?

最佳答案

Progress<T>使用 explicit interface implementation 实现了该方法.所以你不能访问 Report具有 Progress<T> 类型实例的方法.您需要将其转换为 IProgress<T>使用 Report .

只需将声明更改为 IProgress<T>

IProgress<int> progressPercentage = new Progress<int>(b => progressBar1.Value = b);

或者使用强制转换

((IProgress<int>)progressPercentage).Report(i*100/numberOfIterations+1);

我更喜欢前一个版本,后者很尴尬。

关于c# - Progress<T> 没有报告功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27522499/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com