C# 是否有任何方法可以在不使用后台线程的情况下更新进度条?

C# 是否有任何方法可以在不使用后台线程的情况下更新进度条?,c#,wpf,progress-bar,C#,Wpf,Progress Bar,我有一个长时间的计算,它发生在一个按钮点击事件中,在每次迭代之后,我希望进度条更新。我想知道是否有任何不使用后台线程的方法可以做到这一点: private void btnGetData_Click(object sender, RoutedEventArgs e) { progressBarGetData.Minimum = 0; progressBarGetData.Maximum = recordCount; prog

我有一个长时间的计算,它发生在一个按钮点击事件中,在每次迭代之后,我希望进度条更新。我想知道是否有任何不使用后台线程的方法可以做到这一点:

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
进度条不会在屏幕上缓慢增加。我必须使用后台工作人员吗


谢谢。

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

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


否则,您将需要一个单独的线程-要么显式启动,要么使用。

好的,我想我将不得不停止娘娘腔,使用线程。谢谢你的帖子!