我有一个大项目(30个开发类),我想为它制作一个加载栏。我有一个当前进度和总进度条。我还必须粗略地描述当前流程中发生的事情。
我这样做的方式是手动(仇恨会讨厌)经历最贪婪的过程,并估计它将需要多长时间(当它是for循环时,只需每次迭代进行一步)。
我读到Background_Worker会更顺畅,但正如我读到的那样,在我看来,我仍然必须去每一段代码并说我想增加进度条(我的想法)必须这样做,描述对我有意义的过程)。
所以我的问题是:有没有办法将你的方法封装在一个“块”中,这会自动分配进度条的时间?或者有更有效的方法来做我正在做的事情吗?
答案 0 :(得分:1)
最好的方法是将你的主要处理放在一个不同的线程中,不要重载你的GUI,这样它就不会冻结(用户沮丧),然后在GUI线程中执行你的进度条(或者为你创建另一个线程)吧,也)。一切都取决于偏好。
但绝不!冻结用户界面。用户只是认为它已经死了,并试图强制关闭它。
答案 1 :(得分:0)
有没有办法将你的方法封装在一个“块”中,哪个 会自动分配进度条的时间吗?
不,进度条用于显示进度,因此您必须设置开始,结束和当前状态值形成在外部(来自调用者),因为只有调用者知道它将执行什么并且可能控制它。
是的,如果您想象无限大小,可能无法向用户提供有关行动执行的一些定量信息,但通知他,某事是继续。您还可以提供一些文本描述,这些描述会根据当前操作进行更改,因此用户可以看到“某些事情正在发生”。
所以这两种方法都很好,imo。
答案 2 :(得分:0)
也许是具有进度条的后台工作者。使用全局变量来存储进度。
public class SomeClass
{
public int Progress { set; get; }
public void Method1()
{
...
Progress++;
}
public void Method2()
{
...
Progress++;
}
...
}
调用每个方法时,增加进度并调用后台工作程序来报告进度。
我知道有更好的解决方案,但这只是一个想法。