实现进度报告
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,也不含糊