c# - 如何只处理最后一个任务并在c#中丢弃上一个任务
问题描述
我有一个 WPF 应用程序。窗口包括用于显示数据的数据网格和用于搜索数据的按钮。在 viewmodel 中有一种将数据加载到数据网格的方法。
public List<MyObject> DataGridData { get; set; }
public void LoadDataToDatagrid(object obj)
{
Task.Run(() =>
{
DataGridData = new List<MyObject>(repository.GetData());
});
}
每次,当我单击按钮加载数据时,数据都会加载到数据网格中,但需要很长时间。因此,当我多次单击该按钮时,将加载第一个数据。我将开始使用它们,然后再次加载新数据。
如何停止以前的任务并仅为最后一次单击按钮加载数据?
感谢您的回答
解决方案
在加载内容之前,您可能会禁用该按钮?
您必须将按钮禁用属性设置为依赖于 ViewModel 中的布尔值,然后在添加到数据网格时将其设置为 true,然后在完成后将其设置为 false。为此,我假设您可以引发以下事件:
NotifyPropertyChanged();
在 XAML 中,您将执行以下操作:
<Button IsEnabled="{Binding CanClose}"/>
CanClose 是 ViewModel 中的布尔值。当你改变布尔的状态时,你必须引发某种事件。您也可以先禁用按钮,然后开始填充数据网格,完成后再次启用它?
推荐阅读
- powershell - 在 Powershell 中将 int 转换为 chars 会产生意想不到的结果
- c# - 从 js ajax 调用 WebApi 控制器的问题
- redirect - IIS 两个域一个网站带有查询重定向
- twitter-bootstrap - Twitter Bootstrap 缩略图类不起作用
- python - 根据另一个文件的 zip 合并更新 csv 文件中的城市
- php - 在 wordpress 中创建一个小部件以显示最新和最受欢迎的帖子
- python - 与表单 django 中的模型数据库的自动关系
- android - 活动背景透明度和模糊
- c# - 在 C# 中调用受保护的方法 - 反射或单独的派生类?
- php - Laravel Api 部署在 apache2 Ubuntu 路由问题