C# 启动异步进程的类上的异步侦听
解决版本 好的,给你。我甚至不知道如何恰当地问这个问题。我正在创建一个在程序中异步弹出的窗体,这样它就不会干扰主程序。在这个表单中,我想显示来自基类的数据,在这个例子中,它是Metronome类。Metronome类也是异步启动表单的同一个类 我似乎不知道该怎么做,或者这是否可能。我看过各种教程,但似乎无法让它正常工作。任何帮助都将不胜感激 这是我的密码:C# 启动异步进程的类上的异步侦听,c#,events,asynchronous,listener,C#,Events,Asynchronous,Listener,解决版本 好的,给你。我甚至不知道如何恰当地问这个问题。我正在创建一个在程序中异步弹出的窗体,这样它就不会干扰主程序。在这个表单中,我想显示来自基类的数据,在这个例子中,它是Metronome类。Metronome类也是异步启动表单的同一个类 我似乎不知道该怎么做,或者这是否可能。我看过各种教程,但似乎无法让它正常工作。任何帮助都将不胜感激 这是我的密码: using System; namespace Project2 { public class TimeOfTick : Even
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();
}
}
}
在侦听器类中创建公共Metronome属性,并在MetronomeStarter方法中将该属性设置为该属性。这将使您能够在Listener类中完全访问实例化Listener对象的Metronome对象中的所有内容
public void MetronomeStarter()
{
Listener listen = new Listener();
listen.MetronomeItem = this;
ListenerDelegate del = new ListenerDelegate(listen.Starter);
del.BeginInvoke(myCallback, del);
}
你到底是怎么做到的??我是C的新手,我不太明白你说的话。谢谢你的帮助!!那么Metronome酒店呢?:-这就是get/set类型吗?在listener类中,将m字段更改为属性:如果将其命名为MetronomeItem而不是m,则使用get-and-set将其公开,根据我提供的示例,代码将按照您希望的方式工作。嘿,很抱歉再次打扰您,但这似乎不起作用。我在第一篇文章中编辑了代码。我做错了什么?再次感谢你的帮助。好吧,别担心,我真的是个白痴。我现在明白了。刚把节拍器的新部件拆了。我的错。谢谢你的帮助,罗斯。