轻度解析异步~IProgress<T>

来源:互联网 发布:工农牌糖精淘宝网 编辑:程序博客网 时间:2024/06/10 08:31

实现进度报告

int m_percentComplete = 0;private async void StartTaskButton_Click(object sender, EventArgs e){    m_percentComplete = 0;    //知识点3:在new Progrss时,会捕获当前上下文,像我这样在Button的Click    //        事件中创建,那上下文是UI的,这样我可以做到更新UI,即使相关    //        的Report是在后台    var process = new Progress<int>();    //知识点2:Progress<T>,T推荐是值类型,因为在ProgressChanged事件中    //         收到新的进度改变时,已经是一个过时的数据,如果是引用类型或者    //         其他很容易变化又不容易发现,再加上异步,是否会很易出错呢    process.ProgressChanged += (o1, o2) =>    {        if (percentComplete<=100)        {            m_processContentLable.Text = m_percentComplete .ToString();            m_processProcessBar.Value = m_percentComplete;        }else        {            StartTaskButton.Enabled = true;        }    };        StartTaskButton.Enabled = false;        await TaskAsync(process);       }    //知识点1:progress可以为null,因此使用时一定要判断progress是否为null,尤其是异步private async Task TaskAsync(IProgress<int> progress = null){             while (m_percentComplete<= 100)   {      if (progress != null)      {        await Task.Delay(TimeSpan.FromMilliseconds(50));        progress.Report(m_percentComplete++);      }   }}

效果图

这里写图片描述

写在最后

感谢我的组长Frank,因为他,我的代码有了点规范的样子,即使这是个Demo,也不含糊

1 0
原创粉丝点击