如何在类之间传递事件?C#冒泡/传递事件
我知道这听起来很荒谬(而且是),但过去的一段时间里我一直在为此付出沉重的代价。搜索没有出现类似的问题,所以我想我会提出这个问题。
以下是涉及到的对象:
WinForm -> Speaker -> Tweeter
-> Woofer
[扬声器,高音,低音]所有声明一个“SpeakToMe”事件发送一个简单的字符串消息。的事件所使用的标准图案宣称:
public delegate void SpeakToMeHandler(object sender, SpeakToMeEventArgs e);
public event SpeakToMeHandler SpeakToMe;
protected virtual void OnSpeakToMe(string message)
{
if (SpeakToMe != null) SpeakToMe(this, new SpeakToMeEventArgs(DateTime.Now.ToString() + " - " + message));
}
SpeakToMeEventArgs是一个简单的类由含有字符串属性(消息)的EventArgs &继承。
就其本身而言,每个事件都能正常工作。例如,我在表单中设置了一个按钮来创建,订阅和发布[扬声器,高音单元,低音单元]的事件。每个都可以正确回报。
问题是扬声器创建[Tweeter,Woofer]并订阅他们的事件。
我想要的是[Tweeter,Woofer]发射他们的事件,发言者消耗它并且发射它自己的事件。我想这应该是非常简单的:
void tweeter_SpeakToMe(object sender, SpeakToMeEventArgs e)
{
Console.Out.WriteLine("the tweeter is speaking: " + e.Message);
this.OnSpeakToMe("tweeter rockin' out [" + e.Message + "]");
}
通过这个功能(喇叭)步进,Console.Out.WriteLine工作。继续浏览OnSpeakToMe,显示委托为空。
演讲者的SpeakToMe事件由表单订阅。我明白这应该防止事件的委托为空。
我敢肯定,这是一个容易的,我错过了什么?
顺便说一句,万一你好奇我为什么要找这个。 [扬声器,高音扬声器,低音扬声器]是我长时间数据处理操作的演示替身。表单同时运行其中几个并需要每个类的进度更新。
一如既往,任何和所有的帮助非常感谢!
更新:感谢所有的反馈大家。我非常感谢帮助!我拿起了一些好的提示(@David Basarab & @Brian)以及关于如何构造事物的一些不同想法。再次,非常感谢!
你能提供的表单如何订阅议长对象的代码片段? – LBushkin 2009-06-19 14:48:44