事件发布的小程序
CSharp中?事件基于委托 ,事件為委托提供了一種發(fā)布、訂閱的機(jī)制。本人為了熟悉事件的發(fā)布、訂閱機(jī)制 ,就寫了一個(gè)小程序來演示發(fā)布事件?和 訂閱事件。
/*********************************************** 類 名 稱: DateTimeEventArgs
*
* 命名空間: Delegates
*
* 作 者: DreamDays
*
* 說 明: 定制自己的Eventargs,包含相關(guān)的時(shí)間信息
*
* 時(shí) 間:2012年04月08日
*********************************************/
using System;
namespace Delegates
{
public class DateTimeEventArgs:EventArgs
{
private DateTime firstTime;
//第一個(gè)時(shí)間
public DateTime FirstTime
{
get { return firstTime; }
set { firstTime = value; }
}
private DateTime lastTime;
//第二個(gè)時(shí)間
public DateTime LastTime
{
get { return lastTime; }
set
{
lastTime = value;
//求時(shí)間差
Second = GetTimeSpace(FirstTime, LastTime);
}
}
private int second;
//時(shí)間差
public int Second
{
get { return second; }
set { second = value; }
}
//求兩個(gè)時(shí)間相差的秒
private int GetTimeSpace(DateTime fTime, DateTime lTime)
{
//求去掉毫秒的更好的方法^-^
DateTime newFTime = new DateTime(fTime.Year, fTime.Month, fTime.Day, fTime.Hour, fTime.Minute, fTime.Second);
DateTime newLTime = new DateTime(lTime.Year, lTime.Month, lTime.Day, lTime.Hour, lTime.Minute, lTime.Second);
TimeSpan tsLTime = new TimeSpan(newLTime.Ticks);
TimeSpan tsFTime = new TimeSpan(newFTime.Ticks);
TimeSpan tsTimeSpace = tsLTime.Subtract(tsFTime);
return tsTimeSpace.Seconds;
}
}
} using System;
namespace Delegates
{
public class Computer
{
/// <summary>
/// 定義一個(gè)事件,為外部提供一個(gè)訂閱
/// </summary>
public event EventHandler<DateTimeEventArgs> NewTimeSpace;
DateTimeEventArgs e;
//接收一個(gè)DateTime 并將DateTime保存在 e 中
public void NewTime(DateTime dt)
{
if (e == null||e.LastTime.Year >1)
{
e = new DateTimeEventArgs();
e.FirstTime = dt;
return;
}
e.LastTime = dt;
//如果被訂閱 ,就觸發(fā)事件
if (NewTimeSpace != null)
{
NewTimeSpace(this, e);
}
}
}
} using System;
using System.Windows.Forms;
namespace Delegates
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
//提供一個(gè)自己定義的事件
Computer computer = new Computer();
private void FrmMain_Load(object sender, EventArgs e)
{
//訂閱事件 ,如果觸發(fā)事件就執(zhí)行方法 NewCarIsHere
computer.NewTimeSpace += this.NewCarIsHere;
}
//事件觸發(fā)后執(zhí)行的方法
public void NewCarIsHere(object sender, DateTimeEventArgs e)
{
this.textBox1.AppendText(string.Format("{0} 到 {1} 相差 {2} 秒\r\n", e.FirstTime.ToString("yyyy年MM月dd日HH時(shí)mm分ss秒"), e.LastTime.ToString("yyyy年MM月dd日HH時(shí)mm分ss秒"), e.Second.ToString()));
}
private void btnAdd_Click(object sender, EventArgs e)
{
//向自定義事件的發(fā)布者提供時(shí)間參數(shù) ,提供兩次時(shí)間就會(huì)觸發(fā)一次自定義的事件
computer.NewTime(DateTime.Now);
}
}
}
下圖為運(yùn)行效果:
轉(zhuǎn)載于:https://www.cnblogs.com/DreamDays/archive/2012/04/08/2437990.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: JavaScript 高级篇之DOM文
- 下一篇: 绕了一圈,重回邗江区的怀抱