-1

我在多个项目中有多个类,这些类可以通过中介类相互访问。

目前发生的是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 类没有直接关系。

最后我所做的是创建一个自定义事件和一个自定义事件参数,其中包含我想要使用的所有字段。

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);
4

1 回答 1

1

如果您无法更改方法,则必须通过其他方式传递值

1)属性可以是您的一个选项,在 C 中有一个属性并让它从 B 分配。

2) 编写重载方法,该方法可以再接受一个参数并且可以为您完成这项工作,这样您就不必更改从多个地方调用的现有方法。

于 2013-06-05T10:36:54.907 回答