dearwangzong
火焰猫麟
采纳率50%
2013-11-14 15:05

C#进度条能否根据代码的执行进度来加载进度?

我在网上搜索了下资料,大部分都是使用Timer控件或者线程来进行,但是最终都是根据计算结果来写出一个MaxValue和一个Value来计算并且填充进度条
但是计算的话总感觉不是很准确,我如今遇到了一个比较棘手的难关(对于我而言),有个界面的树在读取数据库进行绑定的时候会显得非常慢,但是设定进度条的时间长短根本无法确定,以及代码例如(链接TCP之类的)断开链接也会产生卡主的状况,但是由于线程的关系,进度条依然显示完毕了。
使得我非常的头疼,因此我想问问,有没有办法获取代码的执行进度,根据代码的总执行次数和现在执行的行数来填充进度条?

或者看到这个问题的您能给我一种更加好的方案呢?希望能被解答下。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 6年前

    不可能,一个程序除非执行完成,否则不可能知道自己需要多久能执行完成。进度只能估算。

    在计算机刚刚发明的时候,数学家就考虑过和你相似的问题,他们想,一些数学命题可以用穷举法来试图证明一些数学猜想,比如歌德巴赫猜想,这个在中国家喻户晓。
    说的是“任一大于2的整数都可写成两个质数之和。”。因此,我们可以写一个程序,从2开始往上穷举,对每个数都分解质因数,如果遇到“不能写成两个质数之和“,程序停止。
    这个程序想必再菜鸟的程序员也能写出来。我们不关心这个程序执行需要多久,也不关心用什么性能的计算机,我们的问题是,这个程序会不会停止,有没有确定的执行时间?
    假设我们不通过执行一个程序,知道它的执行时间(或者它会永远执行而不停止),有这种方法存在,那么是不是这类数学难题都解决了?如果我们能推算出程序一直执行而不停止,岂不是证明了哥德巴赫猜想?
    不过很遗憾,这种方法是不存在的。这就是计算机科学上著名的停机问题。,

    点赞 1 评论 复制链接分享
  • u011623102 不良制品 6年前

    不知道能不能在一开始就获取树中节点的数量。
    如果可以的话,可以使用System.ComponentModel.BackgroundWorker控件,这个控件可以用来做前后台进度显示。
    将BackgroundWorker控件的属性WorkerReportsProgress设置为True,之后调用控件的ReportProgress函数就会触发ProgressChanged事件。
    ProgressChanged事件中参数ProgressChangedEventArgs e,e.ProgressPercentage就是你之前ReportProgress函数中填写传递的数。
    如此就可以在ProgressChanged事件中去更新进度条了

    点赞 评论 复制链接分享