代码之家  ›  专栏  ›  技术社区  ›  Joe

如何在Silverlight/CSLA中创建延迟加载和缓存的集合

  •  1
  • Joe  · 技术社区  · 16 年前

    我正在为使用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端不起作用,因为所有数据门户访问都是异步的,因此必须从以下内容开始:

    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都很陌生,所以我可能完全错了)

    1 回复  |  直到 16 年前