c# 如何等待一个返回值为void的进度报告事件结束?

需求:progress.Report执行进度报告完成后,再执行其余的代码;
问题:progress.Report的返回值是void,没法用await,怎么等待其结束?

答案出来了:

 var task = Task<int>.Run(() => { int i = UpdateResult(dictionaryStockReal[stockCode]); return i; });
 //报告一次进度后退出
if(task.Result ==1)

其中: UpdateResult就是progress.Report调用的函数。
总结:灵活运行Task,可以完全抛弃MS程式化的IProgress.Report 方法!

progress是什么类型?不是系统类库的吧。要看你的代码。

Progress 构造函数 (Action)
我现在的代码是这样的:

 //重置IsUpdated标志
 dictionaryStockReal[stockCode].IsUpdated = false;
progress.Report(dictionaryStockReal[stockCode]);

//确认进度报告已完成,否则死循环---需要找到更好的办法!
while (!dictionaryStockReal[stockCode].IsUpdated){ }
//后面的代码省略,必须确认进度报告任务已完成,否则后面的操作与进行中的进度报告有冲突。

Progress 构造函数 (Action)
https://msdn.microsoft.com/zh-cn/library/hh160061(v=vs.110).aspx

在进度报告调用的事件结尾,设置dictionaryStockReal[stockCode].IsUpdated =true;//dictionaryStockReal为窗体级字典

Response.End();

Dispose()方法,虽然能释放当前窗体的资源,却不能强制结束循环,

要想强制突出当前程序要用:System.Environment.Exit(int exitcode)方法;该方法:终止当前进程并为基础操作系统提供指定的退出代码。

如下则问题解决:

private void frmFileDisposal_Closed(object sender, System.EventArgs e)

{

System.Environment.Exit(System.Environment.ExitCode);

this.Dispose();

this.Close();

}

不知能否把进度报告要执行的事件定义为一个task,然后在启动进度报告后,执行task.wait();自己测试下先。。。