gpt4 book ai didi

c# - 将异步事件限制到调用对象

转载 作者:太空宇宙 更新时间:2023-11-03 11:50:42 28 4
gpt4 key购买 nike

在我的 C#-Silverlight-3-Application 中,我创建了一个类,它正在执行一些在我的程序的不同部分中使用的计算。此类需要来自数据库的数据,因此它调用 WCF 服务来获取数据。类的结构如下所示:

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 类,每个类都有自己的 ConsumptionCalculation-Object。

我的问题如下:当我在其中一个类中调用 ConsumptionCalculation 对象的 Do 方法时,所有引用任何 ConsumptionCalculation 对象的类都将收到生成的 CalculationFinished 事件。我认为这是因为所有现有的 ConsuptionCalculation 对象都从 WCF 服务接收 dataSource_GetConsumtionInfoCompleted 事件。但我只希望调用对象接收事件。我想有一种解决此类问题的标准方法,但我还想不出来。你会如何解决这个问题?

提前致谢,弗兰克

最佳答案

您没有说明在哪里或如何声明 CalculationFinished 事件。如果它是静态的,那就可以解释您所看到的行为。但我假设你已经检查过了。也许在调试器中,您可以检查有问题的对象以确定它们是否真的是不同的实例,正如您假设的那样。

您能否使用“id”字段来区分不同的调用者(如果不能,或许可以添加一个额外的参数来区分)?这不会阻止其他类(class)收到通知,但他们都可以快速检查通知是否是给他们的,如果不是,则迅速返回。

关于c# - 将异步事件限制到调用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2193338/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com