如何在长时间的外部操作中更新ProgressBar?
问题描述:
在我的.NET应用程序中,我正在将大型SQL表读入内存,并且我希望应用程序窗口中的ProgressBar
进度至少有所提高,而操作正在阻止。我已经在BackgroundWorker
对象的后台线程中调用Fill()
,我试图在前台线程中更新ProgressBar
,该线程调用了RunWorkerAsync()
,但这不起作用。这里有什么建议?如何在长时间的外部操作中更新ProgressBar?
答
由于无法从Dataset.Fill中获取进度,因此直接使用OnRowUpdate/OnRowUpdated会很痛苦,而且仍然无法完成%完成操作,因此您会发现应更新多少行。
不妨在这里打一个计时器,并在填充任务运行时更新一些动画。
作为一个方面说明,我们写了一个小动画组件,它运行在它自己的线程中,您传递想要在线程中执行的方法。把它一切都很好地包起来,你可以把它放在一个使用块中,并且整齐整齐。适用于火灾和忘记线程,并且您也可以执行模式版本。
你不会从Fill获得进展。你可以尝试OnRowUpdating/Updated,或者去一个基于计时器的简单动画。你如何研究取得了多大进展,取决于你在做什么。如果这太重了,那么计数也可能很重。 – 2013-03-19 21:04:43
我知道'Fill()'没有更新。我试图做的是在后台线程执行'Fill()'的时候,在前台线程中为ProgressBar创建动画,但这不起作用。 – Conrad 2013-03-19 23:04:27
可能没有想过自己。只需在灌装开始时关闭计时器,并在灌装完成时停止计时。 – 2013-03-20 02:28:10