c# - 长后端请求的 MVVM 进度条
问题描述
我有一个带有数据表和大量记录的 WPF/MVVM 应用程序。用户可以选择尽可能多的记录来更新所有记录的一个或多个属性。如果用户单击更新按钮,我的后端将处理更改并更新数据库中的所有记录。但是,每个更改都需要发送到其他一些系统。更新查询本身不需要很长时间,对其他系统的更改需要更多时间。
所以假设用户选择了 2000 行来更新。用户大部分时间都没有耐心,即使只有 3 秒也不喜欢等待。我所做的是以下内容:
if(totalSelectedRows > 1000) { SplitUpdateRequest(); }
else { Update(selectedRows); }
我基本上说如果选择的行数超过 1000 行,更新命令将拆分为多个更新命令,每个更新命令 100 行。所以对于 2000 行,我同步调用 update 方法 20 次。每次通话后,我都会知道更新是否成功。我使用这些知识来显示进度条。我这样做是因为我现在有些用户只会关闭应用程序并一次又一次地尝试,结果后端必须处理大量传入请求。这一切似乎都按预期工作,但我确实相信必须有另一种解决方案/方式来处理或显示一些进展,让用户知道发生了什么。是否有任何建议以不同的方式执行此操作?我没有可能在后端更改任何内容。
在我的代码下面:
Viewmodel:
private AsyncRelayCommand updateCommand;
public ICommand UpdateCommand
{
get
{
return updateCommand ?? (updateCommand = new AsyncRelayCommand(Update));
}
}
private async Task Testing() => await Task.Run(() =>
{
// If more than 1000 records, then the request will be seperated into multiple synchronous update commands
if (selectedRecords?.Count() > 1000)
{
TotalRequests = (int)Math.Ceiling((double)selectedRecords.Count() / 1000);
CurrentRequest = 0;
ProgressPercentage = 0;
for (int i = 0; i < TotalRequests; i++)
{
_service.update(selectedRecords);
CurrentRequest++;
ProgressPercentage = (int)(((double)CurrentRequest / (double)TotalRequests) * 100);
}
}
else
_service.update(selectedRecords);
});
View:
<ProgressBar Minimum="0" Maximum="100" Value="{Binding ProgressPercentage, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Text="{Binding ProgressPercentage, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:0}%}"/>
解决方案
推荐阅读
- vhdl - 从 std.STANDARD.BIT_VECTOR 到 ieee.std_logic_1164.STD_LOGIC_VECTOR 的非法类型转换(数组元素类型差异)
- reactjs - 基于服务器端验证向文本字段添加图标(Formik+Yup+Material UI)
- firebase - 超出火力基地配额(每天?)
- c++ - OpenGL 4.5 直接状态访问渲染一个三角形 - GL_INVALID_VALUE
- r - r 比较来自两个数据帧的字符串值
- python - Plotly:如何处理重叠的颜色条和图例?
- reporting-services - 在 rsreportserver.config 文件中,如何将 CSV 导出设置为无字段分隔符
- javascript - 计算嵌套对象中的值数
- spring-boot - Spring数据R2DBC:org.springframework.data.mapping.PropertyReferenceException:没有找到类型的属性findAll
- sql - 连接不存在数据或链接不明显的表