2012-06-29 1 views
0

Existe-t-il un moyen de créer une fonction de rappel qui se déclenche lorsqu'un objet liste (toute classe implémentant l'interface ICollection de C# .NET) atteint une certaine capacité (nombre d'éléments dans la liste)?Comment créer un événement de rappel sur ICollection en C# - pour le traitement par lots

Je voudrais qu'un événement se déclenche quand mon objet liste a 5 éléments par exemple. Pour vous situer dans le contexte, je le fais pour le traitement de données par lots puisque j'exécute un service qui utilise le protocole HTTP sur le réseau et le traitement par lots est nécessaire pour la performance de mon application. Une implémentation simple est en batch dans la mémoire (dans une liste) et se déclenche quand elle atteint une certaine capacité puis envoie sur le réseau ou s'il y a d'autres outils j'apprécierais n'importe quels pointeurs vers eux.

Merci

+0

Je ne connais pas une implémentation intégrée ('IObservableCollection ' vous informera de tous les changements) mais en créer un devrait être assez facile. Créez simplement une classe avec un membre ICollection privé, et une méthode Add() 'qui garde la trace des éléments ajoutés. Jetez un événement "AddThresholdReached' et vous êtes tous en jeu. – dlev

+0

' IObservableCollection' ressemble à ce dont j'ai besoin pour simplement implémenter une opération par lots –

+0

ICollection est une interface qui signifie qu'elle n'a aucune fonctionnalité.La seule chose que vous savez sur une instance est que Il n'implémente pas l'événement ICollection et ICollection n'a aucun événement, vous pouvez donc créer votre propre collection en héritant par exemple de la liste et implémenter votre propre méthode ICollection.Add – Casperah

Répondre

2

Il n'existe aucun moyen d'ajouter l'événement à chaque classe ICollection qui existe déjà, mais vous pouvez utiliser ObservableCollection ou BindingList comme alternatives. Ces deux éléments déclencheront un événement lorsque la liste sera modifiée. Vous pourrez ainsi vérifier le nombre d'éléments dans l'événement modifié. Vous pouvez également créer votre propre classe qui implémente ICollection simplement en enveloppant les méthodes d'un objet interne List et ajoutez un code spécial à la méthode Add pour vérifier le nombre.

1

Vous pouvez mettre en œuvre l'événement:

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()); 

    } 

}

Vous devrez changer le nom, choisissez votre type (ou faire le trop générique de classe), mettre en œuvre plus logique (comme l'accès à vos articles) - et vous pouvez le modifier pour obtenir le montant du lot dans le constructeur

vous pouvez dériver de la liste à la place

+0

Cela devrait probablement vérifier * multiples * de la taille du lot; Cet exemple ne déclenchera l'événement qu'une seule fois. – dlev

+0

@dlev Je ne voulais pas implémenter sa logique - juste pour donner un exemple d'un moyen de le faire ... mais je l'ai changé quand même – eyossi

Questions connexes