2013-04-11 30 views
2

我有一个很长的计算,发生在按钮单击事件中,并且在每次迭代之后,我想要更新进度栏。我想知道是否有什么办法可以做到这一点,而无需使用一个后台线程:有没有办法更新进度条而不使用后台线程?

private void btnGetData_Click(object sender, RoutedEventArgs e) 
{ 
      progressBarGetData.Minimum = 0; 
      progressBarGetData.Maximum = recordCount; 
      progressBarGetData.Value = 0; 

      while(long iteration going on) 
      { 
       //do work 
       progressBarGetData.Value += 1; 
      } 
}//end button click 

的进度条不慢慢地在屏幕上递增。我必须使用后台工作人员吗?

谢谢。

回答

6

这不是进度条的主要问题 - 这是你在UI线程中执行长时间运行的同步操作的事实。这将冻结整个UI,给用户带来可怕的体验。

如果您可以将您的循环使用异步调用(例如,如果这只是长期运行的,因为它在谈论Web服务或数据库),那么这就是一个选择 - 而且这是在.NET 4.5取得容易。

否则,你需要一个单独的线程 - 要么明确开始或使用BackgroundWorker

+2

好吧,我想我将不得不停止成为娘娘腔并使用线程。感谢帖子! – KateMak 2013-04-11 05:55:08

相关问题