c# - 从 ViewModel 更新 UI 线程

标签 c# wpf user-interface mvvm backgroundworker

我正在尝试使用 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);
    }
}

集合是 ObservableCollectionProgressBarValue绑定(bind)到进度条的值。

我已经查看了几个示例,无论我尝试哪一个 - 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 相关的更新分派(dispatch)回 UI 线程(否则您将获得跨线程访问异常)。

关于c# - 从 ViewModel 更新 UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20617743/

相关文章:

c# - 为什么.net 2.0 比 4.0 快

c# - 如何转换实现接口(interface)的具体类的列表

wpf - 如何阻止 WPF Grid 在子元素上自动插入边距

c# - ReactiveUI:IObservable.Transform() 不转发通知

javascript - 隐藏 div 中内嵌图像的灯箱?

user-interface - “准备安装”对话框中的自定义消息包装

c# - 区分 Windows 版本的最简单方法是什么?

c# - 在 C# 中处理属性更改的更好方法

java - Swing - 当内存游戏结束时计时器不会停止

C# utf8_解码