[英]Using Async Task with Dispatcher to update UI thread in loop for WP8.1 WinRT from ViewModel
[英]Update UI Thread from ViewModel
我試圖通過使用BackgroundWorker
執行在循環內更新我的UI上的進度條的簡單操作。 我不知道我做錯了什么。 任何幫助是極大的贊賞。
private void ProcessButtonClickAction(object param)
{
BackgroundWorker BGWUpdateUi = new BackgroundWorker();
BGWUpdateUi.ProgressChanged += (sender, args) =>
{
ProgressBarValue += args.ProgressPercentage;
((SelectedDwgFile)args.UserState).Status = "Completed";
};
BGWUpdateUi.WorkerReportsProgress = true;
foreach(var obj in FileList)
{
Thread.Sleep(250);
BGWUpdateUi.ReportProgress(pbvalueIncrement, obj);
}
}
該集合是一個ObservableCollection
, ProgressBarValue
綁定到進度條的值。
我查看了幾個示例,無論我嘗試哪一個 - BackgroundWorker
, Dispatcher
- 它們都在循環后更新。
將要在后台運行的部分放入DoWork
方法,然后調用RunWorkerAsync
:
private void ProcessButtonClickAction(object param)
{
BackgroundWorker BGWUpdateUi = new BackgroundWorker()
BGWUpdateUi.DoWork += (sender, args) =>
{
foreach (var obj in FileList)
{
Thread.Sleep(250);
obj.Status = "Completed";
ProgressBarValue += pbvalueIncrement;
}
};
BGWUpdateUi.RunWorkerAsync();
}
此外,請確保將與UI相關的更新分發回UI線程(否則您將獲得跨線程訪問異常)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.