首页 > 解决方案 > 如何只处理最后一个任务并在c#中丢弃上一个任务

问题描述

我有一个 WPF 应用程序。窗口包括用于显示数据的数据网格和用于搜索数据的按钮。在 viewmodel 中有一种将数据加载到数据网格的方法。

    public List<MyObject> DataGridData { get; set; }

    public void LoadDataToDatagrid(object obj)
    {
        Task.Run(() =>
        {
            DataGridData = new List<MyObject>(repository.GetData());
        });
    }

每次,当我单击按钮加载数据时,数据都会加载到数据网格中,但需要很长时间。因此,当我多次单击该按钮时,将加载第一个数据。我将开始使用它们,然后再次加载新数据。

如何停止以前的任务并仅为最后一次单击按钮加载数据?

感谢您的回答

标签: c#asynchronous

解决方案


在加载内容之前,您可能会禁用该按钮?

您必须将按钮禁用属性设置为依赖于 ViewModel 中的布尔值,然后在添加到数据网格时将其设置为 true,然后在完成后将其设置为 false。为此,我假设您可以引发以下事件:

NotifyPropertyChanged();

在 XAML 中,您将执行以下操作:

<Button IsEnabled="{Binding CanClose}"/>

CanClose 是 ViewModel 中的布尔值。当你改变布尔的状态时,你必须引发某种事件。您也可以先禁用按钮,然后开始填充数据网格,完成后再次启用它?


推荐阅读