我使用带绑定的ProgressBar
来显示从远程设备接收文件时的进度。如何从异步方法有效更新用户界面?
<ProgressBar Width="500" Height="50" Value="{Binding ProgressFileReceive}"/>
ProgressFileReceive
是在具有百分比完成我的视图模型属性(double
)。所以要更新进度条,我添加了这个数字。
的问题是我有一个不同async
方法的文件传输方法,所以访问该属性,我必须使用下面的代码:
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
() =>
{
// do something on the UI thread
ProgressFileReceive = (double)i/fileSize * 100;
});
这工作,但使整个过程非常缓慢,因为在每次迭代时(自从我逐字节读取以来,有超过一千个循环),该方法必须使用分派器来更新UI。接收整个文件需要几倍的时间,比如果我没有更新UI时需要多长时间。
我该如何更有效地做到这一点,以加快这一进程?
一个简单的方法:只更新进度条每隔X迭代,其中X是足够大,不处理太多的放缓,但不会大到让进度条锯齿。 – stuartd
@Aniruddha Varma,您不需要手动将绑定数据封送到UI线程,因为您正在使用绑定。 WPF关心它。 –
@stuartd谢谢。是的,我会设置一个柜台,只要表面看起来或多或少光滑,就应该可以工作。 –