c# - 有没有办法在不使用后台线程的情况下更新进度条?

标签 c# wpf progress-bar

我在按钮单击事件中进行了很长的计算,并且在每次迭代之后,我希望更新进度条。我想知道是否有任何方法可以在不使用后台线程的情况下执行此操作:

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

屏幕上的进度条不会缓慢增加。我必须使用后台 worker 吗?

谢谢。

最佳答案

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

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

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

关于c# - 有没有办法在不使用后台线程的情况下更新进度条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15941510/

相关文章:

c# - 使用互操作创建 excel 文件时防止打开 Excel

c# - 是否可以通过 Microsoft Graph 创建 Azure RBAC 角色

c# - 为什么允许使用多个分号?

.net - 在 Microsoft.Win32.OpenFileDialog 上调用 ShowDialog 时出现异常

c# - 当在表单上的某处单击按钮时,wpf 编辑列表框中的项目

html - 将图像添加到进度条

c# - Lambda 表达式仅从集合中选择某些项目

WPF TextBox 滚动条实际上​​是否可见?

Python 3 和带有进度条的请求

android - 线程中的值未更新