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();
}
}
}
정확히 어떻게합니까? 나는 C#에 꽤 새롭고 당신이 말한 것을 얻지 못했습니다. 도와 주셔서 감사합니다!! –
메트로놈 속성은 어떻습니까? :-) 그것은 get/set 유형의 것입니까? –
리스너 클래스에서 "m"필드를 속성으로 변경하십시오. "m"대신 MetronomeItem으로 이름을 지정하고 get 및 set을 public으로 설정하면 코드가 원하는대로 작동합니다. 샘플을 제공해 주셨습니다. – Russ