我在按钮单击事件中进行了长时间的计算,并且在每次迭代之后,我希望进度条更新。我想知道在没有使用后台线程的情况下是否有任何方法可以做到这一点:
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
进度条在屏幕上不会缓慢增加。我必须使用后台工作人员吗?
谢谢。
答案 0 :(得分:6)
进度条不是主要问题 - 这是因为您在UI线程中执行长时间运行的同步操作。这将冻结整个用户界面,给用户带来糟糕的体验。
如果你可以将你的循环转换为使用异步调用(例如,如果它只是长时间运行,因为它正在与Web服务或数据库交谈)那么这是一个选项 - 而且使得很多更容易在.NET 4.5中。
否则,将需要一个单独的线程 - 显式启动或使用BackgroundWorker
。