РЕШЕННАЯ ВЕРСИЯ
Хорошо, вот оно. Я даже не уверен, как правильно задать вопрос. Я создаю форму, которая появляется в программе асинхронно, чтобы она не мешала основной программе. В этой форме я хочу отобразить данные, которые поступают из «базового класса», в данном примере это класс 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();
}
}
}