如何制作自定义异步进度方法?

时间:2016-04-29 08:54:56

标签: c# wpf asynchronous

我试图制作一个async函数(一般来说我async并不是很好!)并且让我说我希望它能做到这一点:

async public string Count()
{
    int x = 0;

    for(x; x<100000; x++)
    {
        await Task.Delay(1);
    }

    return "I'm done";
}

我想抓住那个&#34; x&#34;并将其存储在其他地方,或将其绑定到表示进度的文本框,例如。 "x / 100000"

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可以创建Progress类的对象,并将其传递给Count()方法。 Progress类有一个事件处理程序,每次异步任务都有一些进度报告时都可以调用它。 OnReport方法报告了进度。

var progress = new Progress<int>(); // define your own type or use a builtin type 
progress += (counter) => { //This will be called each time the async func calls Report. 
                          //counter will have the reported value 
                          }


  await Count(progress);

Count函数

async public string Count(Progress<int> progress)
{
 int x = 0;

    for(x; x<100000; x++)
    {
        await Task.Delay(1);
        progress.OnReport(x);
    }

    return "I'm done";
}