2010-08-16 3 views
0

변형 된 버전비동기식 프로세스를 시작한 클래스의 비동기 청취

그렇기 때문에 여기에 있습니다. 나는 제대로 질문하는 법을 모르겠다. 프로그램 내에서 비동기 적으로 팝업하여 주 프로그램을 방해하지 않는 양식을 작성 중입니다. 이 폼 내에서 "기본 클래스"에서 가져온 데이터를 표시하려고합니다.이 예제에서는 Metronome 클래스입니다. Metronome 클래스는 비동기식으로 양식을 시작한 클래스와 동일합니다.

나는 이것을 수행하는 방법이나 이것이 가능할지를 생각할 수 없다. 다양한 자습서를 살펴 보았지만 제대로 작동하지 않는 것 같습니다. 어떤 도움이라도 대단히 감사하겠습니다.

using System; 

namespace Project2 
{ 
    public class TimeOfTick : EventArgs 
    { 
     private DateTime TimeNow; 
     public DateTime Time 
     { 
      set 
      { 
       TimeNow = value; 
      } 
      get 
      { 
       return this.TimeNow; 
      } 
     } 
    } 

    public class Metronome 
    { 
     public event TickHandler Tick; 
     public delegate void TickHandler(Metronome m, TimeOfTick e); 

     public delegate void ListenerDelegate(); 
     public static void myCallback(IAsyncResult result) 
     { 
      ListenerDelegate del = (ListenerDelegate)result.AsyncState; 
      del.EndInvoke(result); 
     } 

     public void MetronomeStarter() 
     { 
      Listener listen = new Listener(); 
      listen.MetronomeItem = this; 
      ListenerDelegate del = new ListenerDelegate(listen.Starter); 
      del.BeginInvoke(myCallback, del); 
     } 

     public void Start() 
     { 
      while (true) 
      { 
       System.Threading.Thread.Sleep(3000); 
       if (Tick != null) 
       { 
        TimeOfTick TOT = new TimeOfTick(); 
        TOT.Time = DateTime.Now; 
        Tick(this, TOT); 
       } 
      } 
     } 
    } 

    public class Listener 
    { 
     private Metronome metronomeItem; 
     public Metronome MetronomeItem 
     { 
      get { return metronomeItem; } 
      set { metronomeItem = value; } 
     } 

     public void Starter() 
     { 
      Console.WriteLine("Starting Listener class");   
      metronomeItem.Tick += new Metronome.TickHandler(HeardIt);    
     } 

     void HeardIt(Metronome m, TimeOfTick e) 
     { 
      System.Console.WriteLine("HEARD IT AT {0}", e.Time); 
     } 

    } 

    class Test 
    { 
     static void Main() 
     { 
      Metronome m = new Metronome();    
      m.MetronomeStarter(); 
      m.Start(); 
     } 
    } 
} 

답변

0

이 리스너 클래스 내에서 공공 메트로놈 속성을 확인하고 그 속성을 "이"당신의 MetronomeStarter의 방법을 설정 :

여기 내 코드입니다. 그러면 Listener 클래스에서 Listener 객체를 인스턴스화 한 Metronome 객체의 모든 항목에 대한 전체 액세스 권한이 부여됩니다.

public void MetronomeStarter() 
     { 
      Listener listen = new Listener(); 
      listen.MetronomeItem = this; 
      ListenerDelegate del = new ListenerDelegate(listen.Starter); 
      del.BeginInvoke(myCallback, del); 
     } 
+0

정확히 어떻게합니까? 나는 C#에 꽤 새롭고 당신이 말한 것을 얻지 못했습니다. 도와 주셔서 감사합니다!! –

+0

메트로놈 속성은 어떻습니까? :-) 그것은 get/set 유형의 것입니까? –

+0

리스너 클래스에서 "m"필드를 속성으로 변경하십시오. "m"대신 MetronomeItem으로 이름을 지정하고 get 및 set을 public으로 설정하면 코드가 원하는대로 작동합니다. 샘플을 제공해 주셨습니다. – Russ

관련 문제