我使用帶綁定的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謝謝。是的,我會設置一個櫃檯,只要表面看起來或多或少光滑,就應該可以工作。 –