0

有没有办法创建一个回调函数,当列表对象(任何实现 C#.NET 的 ICollection 接口的类)达到一定容量(列表中的项目数)时触发?

例如,当我的列表对象有 5 个元素时,我希望触发一个事件。

为了将您置于上下文中,我正在执行批处理数据处理,因为我正在运行一个通过网络使用 HTTP 的服务,并且批处理对于我的应用程序的性能是必要的。

一个简单的实现是在内存中(在列表中)进行批处理,并在达到一定容量时触发,然后通过网络发送,或者如果有其他工具,我将不胜感激任何指向它们的指针。

谢谢

4

2 回答 2

2

无法将事件添加到ICollection已经存在的每个类,但您可以使用其中一个ObservableCollectionBindingList作为替代方案。当列表更改时,这两者都会引发一个事件,因此您只需检查更改事件中的项目数。或者,您可以创建自己的类来实现ICollection简单地包装内部List对象的方法并将特殊代码添加到Add方法中以检查计数。

于 2012-06-29T21:19:04.813 回答
1

您可以实现该事件:

public class YourClassName
{
    private List<Type> m_InnerList = new List<Type>();

    public event EventHandler OnBatch;

    public void Add(Type object)
    {
        m_InnerList.Add(object);
        if ((m_InnerList.Count % YourCountHere == 0) && OnBatch != null)
           OnBatch(this, new EventArgs());

    }

}

您将不得不更改名称,选择您的类型(或使类也通用),实现更多逻辑(如访问您的项目) - 您可以更改它以在构造函数中获取批次数量

您可以改为从 List 派生

于 2012-06-29T21:16:30.817 回答