2013-06-05 46 views
-1

我在多個項目中有多個類,這些類可以通過中介類訪問對方。通過事件傳遞參數

目前發生的事情是,類A,火災和事件,它由B類(調解器)中的一個方法處理,它觸發了一個在C類中處理的事件。這是我可以通信的唯一方法來回A到C

但是被燒成A級事件的方法中,我有我想在C類使用

是否有傳遞它雖然作爲任何方式的int變量一個對象,只有在C類我不能訪問這些信息,我甚至已經嘗試將e轉換爲類類型。也許有一種更簡單的方法,我試圖只是添加到參數和int param中,但是我使用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來說是一種新的東西。我想問的是,是否有任何方式將標題,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); 
+1

添加你的代碼,你必須嘗試到現在爲止可以幫助 – Mzf

+0

我認爲這些事件是自定義事件是什麼。所以你可以指定你想要傳遞的參數(f.e。'A'實例)。用'int'在類'A'中添加一個屬性,然後將'A'作爲發送者傳遞給'B',在這裏你可以將這個自定義事件傳遞給'C'或者在'B'中使用一個屬性。 –

+0

傳遞一個參數應該是微不足道的。你的問題沒有包含足夠的代碼/細節來理解問題。 –

回答

1

如果你不能改變的方法,那麼你必須通過其他方式傳遞價值

1)屬性可以是你的一個選項,在C中有一個屬性,並讓它b e從B分配。

2)收件接受一個參數,並且願意爲你做的工作重載方法,這樣你不改變現有的方法正在從多個地方調用。