1
我想通過使用BackgroundWorker
來執行在我的UI內部更新進度條的簡單操作。我不知道我做錯了什麼。任何幫助是極大的讚賞。從ViewModel更新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
- 它們都在循環之後更新。
我想我不理解。我想要在一個循環中,當我執行一些邏輯之後,我想更新UI。我是否必須執行DoWork事件中的邏輯? –
@TraeMoore是的,你必須把它放在'DoWork'中,否則它會同步執行,直到方法結束纔會更新UI。 – McGarnagle
對不起,我一定會讓你發瘋。 :)我正在從一個ICommand執行此操作,所以我無法訪問應用程序。我的ViewModel與我的觀點完全分離。和FileList綁定到一個'DataGrid',所以我不能推它'ToArray()'。 –