正确的方法做进度条C#

时间:2013-05-13 20:46:32

标签: c# progress-bar

我有一个大项目(30个开发类),我想为它制作一个加载栏。我有一个当前进度和总进度条。我还必须粗略地描述当前流程中发生的事情。

我这样做的方式是手动(仇恨会讨厌)经历最贪婪的过程,并估计它将需要多长时间(当它是for循环时,只需每次迭代进行一步)。

我读到Background_Worker会更顺畅,但正如我读到的那样,在我看来,我仍然必须去每一段代码并说我想增加进度条(我的想法)必须这样做,描述对我有意义的过程)。

所以我的问题是:有没有办法将你的方法封装在一个“块”中,这会自动分配进度条的时间?或者有更有效的方法来做我正在做的事情吗?

3 个答案:

答案 0 :(得分:1)

最好的方法是将你的主要处理放在一个不同的线程中,不要重载你的GUI,这样它就不会冻结(用户沮丧),然后在GUI线程中执行你的进度条(或者为你创建另一个线程)吧,也)。一切都取决于偏好。

但绝不!冻结用户界面。用户只是认为它已经死了,并试图强制关闭它。

答案 1 :(得分:0)

  

有没有办法将你的方法封装在一个“块”中,哪个   会自动分配进度条的时间吗?

  • 不,进度条用于显示进度,因此您必须设置开始结束当前状态值形成在外部(来自调用者),因为只有调用者知道它将执行什么并且可能控制它。

  • 是的,如果您想象无限大小,可能无法向用户提供有关行动执行的一些定量信息,但通知他,某事是继续。您还可以提供一些文本描述,这些描述会根据当前操作进行更改,因此用户可以看到“某些事情正在发生”。

从用户体验的角度来看,没有什么比这更糟的了,然后让用户穿着制服,在做某事的UI面前感到困惑,这一点并不清楚。

所以这两种方法都很好,imo。

答案 2 :(得分:0)

也许是具有进度条的后台工作者。使用全局变量来存储进度。

public class SomeClass
{
   public int Progress { set; get; }

   public void Method1() 
   {
      ...
      Progress++; 
   }

   public void Method2() 
   {
      ...
      Progress++; 
   }

   ...
}

调用每个方法时,增加进度并调用后台工作程序来报告进度。

我知道有更好的解决方案,但这只是一个想法。