请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

Wpf之异步绑定

[复制链接]
查看: 81|回复: 0

2万

主题

2万

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
75491
发表于 2020-9-17 04:23 | 显示全部楼层 |阅读模式
wpf中的IsAsync在某些情况下使用并不太理想, 直接上代码
  1. public sealed class NotifyTaskCompletion : INotifyPropertyChanged{    public NotifyTaskCompletion(Task task)    {        Task = task;        if (!task.IsCompleted)        {            var _ = WatchTaskAsync(task);        }    }    private async Task WatchTaskAsync(Task task)    {        try        {            await task;        }        catch        {            // ignored        }        var propertyChanged = PropertyChanged;        if (propertyChanged == null)            return;        propertyChanged(this, new PropertyChangedEventArgs("Status"));        propertyChanged(this, new PropertyChangedEventArgs("IsCompleted"));        propertyChanged(this, new PropertyChangedEventArgs("IsNotCompleted"));        if (task.IsCanceled)        {            propertyChanged(this, new PropertyChangedEventArgs("IsCanceled"));        }        else if (task.IsFaulted)        {            propertyChanged(this, new PropertyChangedEventArgs("IsFaulted"));            propertyChanged(this, new PropertyChangedEventArgs("Exception"));            propertyChanged(this, new PropertyChangedEventArgs("InnerException"));            propertyChanged(this, new PropertyChangedEventArgs("ErrorMessage"));        }        else        {            propertyChanged(this, new PropertyChangedEventArgs("IsSuccessfullyCompleted"));            propertyChanged(this, new PropertyChangedEventArgs("Result"));        }    }    public Task Task { get; private set; }    public TResult Result =>        Task.Status == TaskStatus.RanToCompletion ?            Task.Result : default;    public TaskStatus Status => Task.Status;    public bool IsCompleted => Task.IsCompleted;    public bool IsNotCompleted => !Task.IsCompleted;    public bool IsSuccessfullyCompleted =>        Task.Status ==        TaskStatus.RanToCompletion;    public bool IsCanceled => Task.IsCanceled;    public bool IsFaulted => Task.IsFaulted;    public AggregateException Exception => Task.Exception;    public Exception InnerException =>        Exception?.InnerException;    public string ErrorMessage =>        InnerException?.Message;    public event PropertyChangedEventHandler PropertyChanged;}
复制代码
例如加载一个比较耗时的数据在加载过程中Loading
  1.                     
复制代码
原文参考

https://docs.microsoft.com/en-us/archive/msdn-magazine/2014/march/async-programming-patterns-for-asynchronous-mvvm-applications-data-binding

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表