2011-06-29 36 views
0

我在c#窗体窗体(fw4.0)中有一个应用程序,我有一个方法创建一个json字符串并通过后发送到网页中的操作方法。我不知道需要多少,但我想在执行方法时显示进度条。我该怎么做? 我的一个想法是在方法运行时执行计数器并将其显示给用户,但我不知道如何......它必须位于另一个线程中?怎么样?在Windows应用程序中运行方法时显示进度

我没有任何更有用的信息提供..我希望你能帮助我! 谢谢!

回答

1

Use the background worker防止阻止UI并报告进度。

+0

我知道这一点,但我不知道如何显示发送帖子和检索答案的一种方法的进展..如果该方法是在foreach之间,为或while循环我会知道它如何。但是这种方法在执行时没有任何形式的“计数”。 –

+0

如果你不知道持续时间将进度条设置为Indeterminate:http://stackoverflow.com/questions/2844833/how-do-you-show-progress-when-indeterminate-true-in-a-wpf-进度条你永远不会知道电话会花多长时间... –

+0

我喜欢这一点,但我无法找到ProgressBar对象中的任何Intermediate(net4.0 c#)。你给我的例子是wpf ..我认为在windows窗体中,ProgressBar中没有中间事物:S 有一件事可以起作用,它是一个定时器,它显示方法运行时的当前时间,当方法结束时停止..但我想我需要一些线程的知识,我没有:D是一个好主意吗? –

0

您可以根据两个值报告进展情况:

  • prob_time - 的时间最有可能的量的行动将才能完成;

  • max_time - 在考虑操作失败之前,您愿意等待的最长时间;

您可以使进度条在prob_time中达到某个点(例如80%),然后在(max_time-prob_time)中达到100%。

如果动作完成速度越快MAX_TIME,你取得的进步跳转到100%,并报告“成功”,否则报告“失败”

0

最后我做到了! 我必须使用2个后台工作者..这就是我所做的... backgroundWorker1:执行post方法。 backgroundWorker2:执行TimeSpan计数器。 当backgroundWorker2启动时,将TimeSpan设置为0,并且在DoWork中,如果backgroundWorker1 CancellationPending为false,那么我会在backgroundWorker2中报告进度。 当post方法完成后,我将backgroundWorker1设置为CancelAsync,因此backgroundWorker2将终止到。 我认为这是我最好的解决方案。

相关问题