我在多个项目中有多个类,这些类可以通过中介类相互访问。
目前发生的是A类,火灾和事件,它由B类(中介)中的方法处理,它触发在C类中处理的事件。这是我可以进行通信的唯一方式A到C.
然而,在A类中触发事件的方法中,我有一个我希望在C类中使用的int变量。
有没有办法将它作为一个对象传递,只有在C类我无法访问信息,我甚至尝试将e转换为类类型。也许有一个更简单的方法,我已经尝试添加到参数和int参数但是我使用beginInvoke不会接受我不能改变这个方法,因为它在代码中的其他地方使用。
protected virtual void OnProcessing(EventHandler handler, EventArgs args, int p)
{
var temp = handler;
if (temp != null)
{
var eventListeners = temp.GetInvocationList();
foreach (EventHandler e in eventListeners)
{
e.BeginInvoke(this, args, EndAsyncImageAcquiredEvent, p);
}
}
else
{
throw new FatalException("No handler is attached to the camera's ImageAcquiredEvent");
}
}
这是A类中触发事件的方法
progressPercentage = (int)Math.Round(sum, 0);
OnProcessing(startProcess, null);
这里的onprocessing是从一个方法调用的,我想传递给这个方法progressPercentage,但是想知道是否有办法通过使用参数或对象来实现这一点,我将如何在另一个上检索它方即c类
修改
对不起,当我写这篇文章的时候,伙伴们对stackoverflow有点新意。我要问的是,是否有任何方式可以通过诸如Title,ProgressPercentage,UserState,DisplayPercentage等字段从A类到C类.B类是必需的,因此C类和A类没有直接关系。
最后,我所做的是创建一个自定义事件和一个自定义事件Args,其中包含我想要使用的所有字段。
public event ProgressHandler StartProgress;
ProgressHandler是我的自定义事件,并且是这样构成的,
public delegate void ProgressHandler(object sender, ProgressEventArgs e);
ProgressEventArgs是我的习俗论证,或者我将用来存放我的数据的对象
public ProgressEventArgs(string title, int progressPercentage, bool displayPercentage, object userState) : base (progressPercentage, userState)
{
Title = title;
ProgressPercentage = progressPercentage;
UserState = userState;
DisplayPercentage = displayPercentage;
}
因此事件在A类中被触发并在B类中处理。然后B类接受了这个数据并发起了一个新事件,然后C类处理了这个事件。
Class A => Class B
Class B => Class C
所以要将我的字段添加到我的自定义对象中,
ProgressEventArgs e = new ProgressEventArgs("SomeName", 25, null, true);
然后关闭此数据我发了一个事件
StartProgress(null, e);
答案 0 :(得分:1)
如果您无法更改方法,则必须通过其他方式传递值
1)属性可以是一个选项,在C中有一个属性,让它从B分配。
2)写入重载方法,接受一个参数并为你完成工作,这样你就不必改变从多个地方调用的现有方法。