我在多个项目中有多个类,这些类可以通过中介类相互访问。
现在发生的事情是类A,触发和事件,它由类B(中介)中的方法处理,它触发一个事件,在类c中处理。这是我可以从A到c通信的唯一方式。
然而,在类A中触发事件的方法中,我有一个int变量,我想在类c中使用。
是否有任何方法传递它,虽然作为一个对象,只有在类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这里是从一个方法调用的,我想传递到这个方法progresspercent,但想知道是否有一种方法可以通过使用参数或对象来做到这一点,以及我如何在另一边检索它,如类c
编辑
对不起,伙计们,当我写这篇文章时,对stackoverflow有点陌生。我想问的是,是否有任何方法可以将诸如Title, progrespercentage, UserState, DisplayPercentage等字段从类A传递到类C。需要类B,以便类C和类A没有直接关系。
最后,我所做的是创建一个自定义事件和一个自定义事件参数,其中包含我想要使用的所有字段。
public event ProgressHandler StartProgress;
ProgressHandler是我的自定义事件,它是这样创建的,
public delegate void ProgressHandler(object sender, ProgressEventArgs e);
而progressevenargs是我的custom参数,或者说是我要用来存放数据的对象
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);
如果不能更改方法,则必须通过其他方式传递值
1)属性可以是一个选项,在C中有一个属性,让它从b中分配。