【问题标题】:How to create a lazy-loaded and cached collection in Silverlight/CSLA如何在 Silverlight/CSLA 中创建延迟加载和缓存的集合
【发布时间】:2009-05-08 18:53:06
【问题描述】:

我正在为使用 CSLA 编写的现有桌面应用程序创建 Silverlight 前端。我遇到的一件事是转换如下类:

public class SomeCollection : Csla.ReadOnlyListBase<SomeCollection, SomeObject>
{
    private static SomeCollection _list = null;
    public static SomeCollection GetSomeCollection()
    {
        if (_list == null)
        {
            _list = DataPortal.FetchChild<SomeCollection>();
        }
        return _list;
    }
}

代码中充斥着“SomeCollection.GetSomeCollection()” 这在 silverlight 方面不起作用,因为所有 DataPortal 访问都是异步的,因此您必须从以下内容开始:

public static void GetSomeCollection(EventHandler<DataPortalResult<SomeCollection>> callback)
{
    DataPortal<SomeCollection> portal = new DataPortal<SomeCollection>();
    portal.FetchCompleted += callback;
    portal.BeginFetch();
}

回调处理程序在数据准备好时被调用。我当然可以缓存这个结果,但与此同时,任何 SomeCollection.GetSomeCollection() 调用都会失败。

我尝试阻塞直到异步调用完成,但到目前为止我还没有运气。这不是一个很好的解决方案,但我不知道如果在加载数据之前调用 SomeCollection.GetSomeCollection() 还能做什么。我能想到的唯一其他选择是允许 SomeCollection.GetSomeCollection() 返回 null,然后以某种方式将所有调用者转换为处理 null 返回值

有什么想法吗?

(我是 Silverlight 和 Csla 的超级新手,所以我可能会以完全错误的方式处理这个问题)

【问题讨论】:

    标签: silverlight caching asynchronous csla


    【解决方案1】:
    猜你喜欢
    • 2011-01-18
    • 1970-01-01
    • 2020-01-23
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多