в моем C # -Silverlight-3-Application я создал класс, который выполняет некоторые вычисления, которые используются в различных частях моей программы. Этот класс нуждается в данных из базы данных, поэтому он вызывает WCF-Service для получения данных. Структура класса выглядит следующим образом:
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);
}
}
Объекты, которым требуется класс расчета, ссылаются на него и подписываются на событие 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
}
}
У меня есть несколько классов, таких как класс IUseTheCalculation, у каждого из которых есть свой собственный объект ConsulationCalculation-Object.
Моя проблема заключается в следующем:
Когда я вызываю метод Do объекта ConsumeCalculation в одном из классов, ВСЕ классы, имеющие ссылку на любой объект ConsumpCalculation, получат полученное событие CalculationFinished. Я думаю, это потому, что все существующие объекты ConsuptionCalculation получают событие dataSource_GetConsumtionInfoCompleted от службы WCF.
Но я хочу, чтобы только вызывающий объект получил событие. Я думаю, что существует стандартный подход к решению этой проблемы, но я пока не могу понять это. Как бы вы решили эту проблему?
Спасибо заранее,
Frank