委托与事件,控制台显示不了

VS_URL 2012-06-07 03:46:43
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace 委托与事件三
{
class Program
{
static void Main(string[] args)
{
/*订阅事件*/
MyTimerClass mc = new MyTimerClass();
ClassA ca = new ClassA();

mc.Elapsed+=new EventHandler(ca.TimerHandlerA);//委托形式
mc.Elapsed += ClassB.TimerHandlerB;//方法引用形式【实例方法与静态方法】

mc.Elapsed += delegate(object source, EventArgs e)//委托形式
{
Console.WriteLine("使用委托形式订阅事件!");
};
mc.Elapsed += (object source, EventArgs e) =>
{ Console.WriteLine("使用Lambda形式订阅事件!"); };

Thread.Sleep(2000);
mc.MyElapsed += ClassD.TimerHandlerD;

Thread.Sleep(2000);

}
}

/// <summary>
/// 发布者类
/// </summary>
public class MyTimerClass
{
//1.声明事件
public event EventHandler Elapsed;
//2.触发事件
private void OnOneSecond(object source,EventArgs args)
{
if (null != Elapsed)
{
Elapsed(source,args);
}
}
public delegate void MyEventHandler(object obj,MyTCEventArgs e);
public event MyEventHandler MyElapsed;
private void OnOneSecond1(object srouce,MyTCEventArgs e)
{
if (null != MyElapsed)
{
MyTCEventArgs mtcea = new MyTCEventArgs("Message form OnOneScound");
MyElapsed(srouce,mtcea);
}
}
}

class ClassA
{
public void TimerHandlerA(object obj, EventArgs e)
{
Console.WriteLine("ClassA handler called!");
}
}
class ClassB
{
public static void TimerHandlerB(object obj, EventArgs e)
{
Console.WriteLine("ClassB handler called!");
}
}

/// <summary>
/// 通过扩展EventArgs来传递数据
/// </summary>
public class MyTCEventArgs : EventArgs
{
public string Message;
public MyTCEventArgs(string s)
{
Message = s;
}
}

class ClassD
{
public static void TimerHandlerD(object obj, MyTCEventArgs e)
{
Console.WriteLine("ClassD Message:{0}",e.Message);
}
}
}



上面的代码怎么控制台显示不了输出内容
...全文
114 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
E次奥 2012-06-07
  • 打赏
  • 举报
回复
在main方法触发事件!@
VS_URL 2012-06-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

请问你在哪里触发的 OnOneSecond和OnOneSecond1,他们不触发,你的事件不可能响应
[/Quote]
谢谢!!
在那个发布类里加上下面代码就行了。
private System.Timers.Timer MyPrivateTimer;
public MyTimerClass()
{
MyPrivateTimer = new System.Timers.Timer();
MyPrivateTimer.Elapsed += OnOneSecond;
MyPrivateTimer.Interval = 100;

MyPrivateTimer.Enabled = true;
}
SocketUp 2012-06-07
  • 打赏
  • 举报
回复
只+=,没触发
bdmh 2012-06-07
  • 打赏
  • 举报
回复
请问你在哪里触发的 OnOneSecond和OnOneSecond1,他们不触发,你的事件不可能响应

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧