如何报告类中方法的实时进度?
public class Foo{
public string Bar(){
int i = 0;
while(true)
{
i++;
//return i.ToString();
if(i > 10) break;
}
return "Loop end";
}
}
Foo foo = new Foo();
public void ShowStatus()
{
string status = foo.Bar();
//change the string value to each while loop
}
在这种情况下,预期的输出将是将字符串更新为每个循环而无需结束该方法。
答案 0 :(得分:3)
您可以重构您的方法以使其异步运行并将一个IProgress
对象传递给它:
public async Task ShowStatusAsync(IProgress<StatusProgress> progress)
{
...
progress?.Report(new StatusProgress(...));
}
以下是有关该模式的更多信息: https://docs.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/task-based-asynchronous-pattern-tap
答案 1 :(得分:1)
您可以在Foo
类中添加一个事件:
public delegate void ProgressEventHandler(object sender, ProgressEventArgs e);
public event ProgressEventHandler Progress;
...然后从您的其他班级订阅此活动:
Foo foo = new Foo();
foo.Progress += (sender, e) => { /* Do something */ };
...但是您需要编写许多代码,包括类ProgressEventArgs
,并按照@Stefan的建议与Progress
通用类进行异步可能更容易。