Dans mon C# -Silverlight-3-Application, j'ai créé une classe, qui fait des calculs qui sont utilisés dans différentes parties de mon programme. Cette classe a besoin de données provenant d'une base de données, elle appelle donc un service WCF pour obtenir les données. La structure de la classe ressemble à ceci:Restreindre les événements asynchrones à l'objet appelant
public class ConsumptionCalculation
{
// Declare the event to notify subscribers, that the calculation has finished
public delegate void HandlerConsumtionCalculationFinished(object sender, ConsumtionCalculationArgs args);
public event HandlerConsumtionCalculationFinished CalculationFinished;
public void Do(int id)
{
// call the WCF-Service
DataContainer.instance.dataSource.GetConsumtionInfoAsync(id);
}
void dataSource_GetConsumtionInfoCompleted(object sender, GetConsumtionInfoCompletedEventArgs e)
{
// Receive the result of the WCF-Service call
// do some calculation here and put the results in the variable 'args'
// Raise an event to notify listeners, that the calculation is finished
CalculationFinished(this, args);
}
}
Les objets qui ont besoin de la référence calcul classe et abonnez-vous à l'événement CalculationFinished.
public class IUseTheCalculation
{
ConsumptionCalculation _calcObject;
public IUseTheCalculation()
{
_calcObject = new ConsumptionCalculation();
_calcObject.CalculationFinished += new HandlerConsumptionCalculationFinished(CalculationFinishedEvent);
}
private void CalculationFinishedEvent(object sender, ConsumptionCalculationArgs args)
{
// use the calculation to display data or write it to a file or whatever
}
}
J'ai plus d'une classe comme la classe IUseTheCalculation qui ont chacun leur propre ConsumptionCalculation-objet.
Mon problème est le suivant: Lorsque j'appelle la méthode Do de l'objet ConsumptionCalculation dans l'une des classes, toutes les classes qui ont une référence à un objet ConsumptionCalculation recevront l'événement CalculationFinished résultant. Je pense que c'est parce que tous les objets ConsuptionCalculation existants reçoivent l'événement dataSource_GetConsumtionInfoCompleted du service WCF. Mais je veux seulement que l'objet appelant reçoive l'événement. Je suppose qu'il y a une approche standard à ce genre de problème, mais je ne pouvais pas encore le comprendre. Comment résoudriez-vous ce problème?
Merci à l'avance, Frank
Une raison pour laquelle vous n'avez pas créé de proxy asynchrone, plutôt que de l'implémenter vous-même? –
Je suis désolé, mais je ne comprends pas votre point. – Aaginor