比如说,需要将客户对象从db加载到silverlight应用程序,以便在UI中显示客户详细信息。我们需要检测用户是否正在更改UI中的任何数据。
我们正在从视图模型中侦听属性更改的通知。但是,当通知是属性更改的结果时,我们必须将其丢弃。
class CustomerLoader
{
Helper helerobj;
Address addressobj;
Profile profileobj;
void LoadFromDb()
{
helperobj.Load();
addressobj.Load();
profileobj.Load();
//start listening after the loading finished
this.propertychanged += new PropertyChangedEventHandler(handlepropertychanged);
}
这样做的问题是内部对象可能正在调用可能设置属性的异步函数。所以当我们开始进行属性更改监听时,加载可能还没有完成。
我们需要知道加载何时实际完成。到目前为止,我们要求正在开发内部对象类的开发人员接受参数中的回调,当函数完成时,他们应该调用该参数。
还有其他办法吗?
答案 0 :(得分:1)
除了非常经典的异步对象加载外,你只需要它。
所以是的,唯一的解决方案是让开发人员在加载时提出异步函数。现在你有几个解决方案来实现Silverlight中的异步性。
你可以像你一样提供回调,或者使用async和await来管理你的异步任务,如下所示:http://10rem.net/blog/2012/05/22/using-async-and-await-in-silverlight-5-and-net-4-in-visual-studio-11-with-the-async-targeting-pack