通过事件传递参数

本文关键字:参数 事件 | 更新日期: 2023-09-27 18:16:55

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

现在发生的事情是类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中分配。

2)写一个重载方法,接受一个参数,这将为你做的工作,这样你就不必改变现有的方法,从多个地方调用