cqtrq
2015-09-15 12:09
采纳率: 97.1%
浏览 2.6k
已采纳

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • cqtrq 2015-09-18 14:19
    已采纳

    答案出来了:

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

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

    点赞 打赏 评论
  • blownewbee 2015-09-15 12:15

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

    点赞 打赏 评论
  • cqtrq 2015-09-15 12:52

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

     //重置IsUpdated标志
     dictionaryStockReal[stockCode].IsUpdated = false;
    progress.Report(dictionaryStockReal[stockCode]);
    
    //确认进度报告已完成,否则死循环---需要找到更好的办法!
    while (!dictionaryStockReal[stockCode].IsUpdated){ }
    //后面的代码省略,必须确认进度报告任务已完成,否则后面的操作与进行中的进度报告有冲突。
    
    点赞 打赏 评论
  • cqtrq 2015-09-15 12:53
    点赞 打赏 评论
  • cqtrq 2015-09-15 12:57

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

    点赞 打赏 评论
  • 残缺丶 2015-09-16 03:30

    Response.End();

    点赞 打赏 评论
  • 残缺丶 2015-09-16 08:58

    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();

    }

    点赞 打赏 评论
  • cqtrq 2015-09-17 02:50

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

    点赞 打赏 评论

相关推荐 更多相似问题