I'm using a ProgressBar
with binding to show the progress when receiving a file from a remote device.
<ProgressBar Width="500" Height="50" Value="{Binding ProgressFileReceive}"/>
ProgressFileReceive
is a property (double
) in my View Model which has the percentage completion. So to update the Progress Bar, I add to this number.
The problem is I have the file transfer method in a different async
method, and so to access this property I must use the following code :
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
() =>
{
// do something on the UI thread
ProgressFileReceive = (double)i / fileSize * 100;
});
This works but makes the whole process extremely slow, since at each iteration (there are over a thousand loops since I read byte-by-byte) the method has to use the dispatcher to update the UI. It takes several times longer to receive the whole file, than it would take if I was not updating the UI.
How can I do this more efficiently so as to speed up the process ?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…