-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

編集

申し訳ありませんが、私がこれを書いたとき、皆さんはスタックオーバーフローに慣れていませんでした。私が尋ねたかったのは、Title、ProgressPercentage、UserState、DisplayPercentage などのフィールドをクラス A からクラス C に渡す方法があるかどうかということでした。クラス B は、クラス C とクラス A が直接関係を持たないようにするために必要でした。

最終的に私がしたことは、使用したいすべてのフィールドを含むカスタム イベントとカスタム イベント引数を作成することでした。

public event ProgressHandler StartProgress;

ProgressHandler は私のカスタム Event で、そのように構成されていました。

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