首页 / C# / c# – MVVM和异步数据访问
c# – MVVM和异步数据访问
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – MVVM和异步数据访问,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1367字,纯文字阅读大概需要2分钟。
内容图文
![c# – MVVM和异步数据访问](/upload/InfoBanner/zyjiaocheng/802/b2f2bc9c9c6f49f49e3ce3aaade26ca6.jpg)
所以我有一个使用MVVM模式的WPF应用程序(Caliburn.Micro).我得到了视图和视图模型的连接,基本上缺少的是数据.数据将从WCF服务,本地存储或内存/缓存“按需”检索 – 原因是允许脱机模式并避免不必要的服务器通信.另一个要求是异步检索数据,因此不会阻止UI线程.
所以我想创建一些视图模型用来请求数据的“AssetManager”:
_someAssetManager.GetSomeSpecificAsset(assetId, OnGetSomeSpecificAssetCompleted)
请注意,它是异步调用.我遇到了一些不同的问题.如果不同的视图模型(大致)同时请求相同的资产,我们如何确保我们不做不必要的工作,并且他们都获得了我们可以绑定的相同对象?
不确定我是否采取了正确的方法.我一直在看一下Reactive Framework – 但我不知道如何在这种情况下使用它.关于我可以使用的框架/技术/模式的任何建议?这似乎是一种相当常见的情况.
解决方法:
Dictionary<int, IObservable<IAsset>> inflightRequests;
public IObservable<IAsset> GetSomeAsset(int id)
{
// People who ask for an inflight request just get the
// existing one
lock(inflightRequests) {
if inflightRequests.ContainsKey(id) {
return inflightRequests[id];
}
}
// Create a new IObservable and put in the dictionary
lock(inflightRequests) { inflightRequests[id] = ret; }
// Actually do the request and "play it" onto the Subject.
var ret = new AsyncSubject<IAsset>();
GetSomeAssetForReals(id, result => {
ret.OnNext(id);
ret.OnCompleted();
// We're not inflight anymore, remove the item
lock(inflightRequests) { inflightRequests.Remove(id); }
})
return ret;
}
内容总结
以上是互联网集市为您收集整理的c# – MVVM和异步数据访问全部内容,希望文章能够帮你解决c# – MVVM和异步数据访问所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。