gpt4 book ai didi

c# - 从 ViewModel 更新 UI 线程

转载 作者:行者123 更新时间:2023-12-03 10:23:21 24 4
gpt4 key购买 nike

我正在尝试使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com