有什么方法可以在不使用后台线程的情况下更新进度条? - c#

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

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线程中执行长时间运行的同步操作的事实。这样会冻结整个UI,给用户带来糟糕的体验。

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

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

WPF WebBrowser甚至使用ObjectForScripting在单独的线程上锁定UI - javascript

在与WPF Web浏览器控件绑定的ObjectForScripting上调用方法时,网页UI锁定会出现一个奇怪的问题。进一步的研究使我们意识到整个UI(包括WPF应用程序而不是WebBrowser)都已锁定。使用的技术是带有Caliburn.Micro和Autofac的WPF。我在COM可见类上使用方法来推送到Caliburn.Micro提供的事件聚合器。进…

WPF MVVM中的动态TabControl - c#

我几周前开始使用WPF(在C#中),现在我需要一些高级帮助来使用tabcontrol。首先,我正在使用MVVM(模型视图ViewModel)模式来设计我的应用程序,并且我有一个约束,即试图不要在文件(初始化xaml文件)后面的代码中添加代码。现在,我的问题是在MainWindow视图(窗口)中动态创建新的tabItem,当单击按钮(例如“新建选项卡”按钮)时…

WPF-将窗口大小设置为子用户控件大小 - c#

我有一个选项卡控件,该控件动态地填充有包含各种大小的用户控件的选项卡。打开选项卡后,我希望窗口自动调整大小,使其在活动用户控件下有意义。有一种干净的方法可以做到这一点吗?我正在使用标准的mvvm模式。 参考方案 在Window类上使用SizeToContent属性。<Window x:Class="WpfApplication1.MainWi…

在datagrid(wpf)中选择行索引 - c#

如何在datagrid中选择行索引? 事件SelectionChanged以下代码不起作用: private DataGridRow dgr = new DataGridRow(); private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { thi…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制