2013-06-05 2 views
-1

여러 프로젝트에 여러 클래스가 있으며이 클래스는 중재자 클래스를 통해 서로 액세스 할 수 있습니다.이벤트를 통한 매개 변수 전달

순간에 일어나는 일은 Class A, 화재 및 이벤트인데 Class C에서 처리되는 이벤트를 발생시키는 Class B (조정자)의 방법으로 처리됩니다. 이는 내가 통신 할 수있는 유일한 방법입니다. 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"); 
     } 
    } 

, 나는이 방법 progressPercentage에 통과하고 싶은

 progressPercentage = (int)Math.Round(sum, 0); 

    OnProcessing(startProcess, null); 

이 방법에서 호출 여기 Onprocessing 이벤트를 발생 클래스 A의 방법 만 알고 싶습니다있다 상기 인수를 사용하여이 작업을 수행의 방법, 또는 개체이며 어떻게 내가 다른 측면 즉, 클래스 C

편집

에 검색 할

죄송합니다 얘들 아서 일종의 stackoverflow 내가 이것을 썼습니다. Class A와 Class C의 Title, ProgressPercentage, UserState, DisplayPercentage와 같은 필드를 통과하는 방법이 있다면 클래스 C와 클래스 A가 직접 관계가 없도록 클래스 B가 필요했습니다.

결국 내가 한 것은 사용자 지정 이벤트 및 사용자 지정 이벤트 Args를 만들고 사용하려는 모든 필드가 포함 된 것입니다.

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

나는 이러한 이벤트가 사용자 지정 이벤트라고 가정합니다. 따라서 당신은 인자로 전달하고자하는 것을 지정할 수 있습니다 (예를 들어'A' 인스턴스). 이'int' 클래스에'A' 클래스의 속성을 추가하고,'A'를 보낸 사람으로'B'에 건네줍니다.이 커스텀 이벤트를'C'로 전달하거나'B'에서 속성을 사용할 수 있습니다. –

+0

매개 변수를 전달하는 것은 간단합니다. 귀하의 질문에는 문제를 이해하기위한 충분한 코드/세부 정보가 포함되어 있지 않습니다. –

답변

1

을 발사,이 데이터를 전달하는, 내 사용자 정의 개체로 내 필드를 추가합니다 다른 수단으로 값을 전달할 수 있습니다.

1) 속성은 사용자를위한 옵션 일 수 있으며 C로 속성을 갖고 b B에서 배정 된

2) 하나 이상의 매개 변수를 받아들이고 작업을 수행하는 오버로드 메서드를 작성하십시오. 이렇게하면 여러 위치에서 호출되는 기존 메서드를 변경하지 않아도됩니다.