C# 从ViewModel更新UI线程

C# 从ViewModel更新UI线程,c#,wpf,user-interface,mvvm,backgroundworker,C#,Wpf,User Interface,Mvvm,Backgroundworker,我试图通过使用BackgroundWorker在循环内部执行更新UI上进度条的简单操作。我不知道我做错了什么。非常感谢您的帮助 private void ProcessButtonClickAction(object param) { BackgroundWorker BGWUpdateUi = new BackgroundWorker(); BGWUpdateUi.ProgressChanged += (sender, args) => { Progre

我试图通过使用
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);
    }
}
该集合是一个
可观察集合
进度条值
绑定到进度条的值


我已经看过几个例子,无论我尝试哪一个-
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线程(否则会出现跨线程访问异常)。

我想,我不明白。我想进入一个循环,在我执行一些逻辑之后,我想更新UI。我必须在DoWork事件中执行逻辑吗?@traemore是的,你必须将其放入
DoWork
,否则它将同步执行,并且UI在方法结束之前不会得到更新。对不起,我一定让你发疯了。:)我正在从ICommand执行此操作,所以我没有访问应用程序的权限。我的视图模型与我的视图完全分离。而且文件列表绑定到了一个
数据网格
,所以我不能把它推到数组()。。。我几乎没醒,这有助于我清醒:P.
应用程序
应该是一个静态类,所以您必须访问它?实际上,尽管没有调度程序,但还是可以尝试一下——它似乎可以工作,尽管我不明白为什么。@traemore就文件列表而言。。。我不知道,也许不用它试试。我以为你不能从后台线程访问UI内容,但也许我弄错了。。。