已解决的版本
好的,就是这样。我甚至不确定如何正确地提出这个问题。我正在创建一个异步弹出程序的表单,这样它就不会干扰主程序。在这个表单中,我想显示来自“基类”的数据,在本例中,它是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 :(得分:0)
在Listener类中创建一个公共Metronome属性,并在MetronomeStarter方法中将该属性设置为“this”。这将使您在Listener类中完全访问Metronome对象中实例化Listener对象的所有内容。
public void MetronomeStarter()
{
Listener listen = new Listener();
listen.MetronomeItem = this;
ListenerDelegate del = new ListenerDelegate(listen.Starter);
del.BeginInvoke(myCallback, del);
}