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

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

谢谢你。

4

1 回答 1

6

主要问题不是进度条,而是您在 UI 线程中执行长时间运行的同步操作。这将冻结整个 UI,提供糟糕的用户体验。

如果您可以将循环转换为使用异步调用(例如,如果它只是长时间运行,因为它正在与 Web 服务或数据库通信),那么这是一种选择 -在 .NET 4.5 中它变得更加容易。

否则,您需要一个单独的线程 - 显式启动或使用BackgroundWorker.

于 2013-04-11T05:46:59.893 回答