实例.net CF组件编程之Tcp的小程序第2篇为组件添加事件(2)
方法类似于属性,大家应该自己去看吧,因为实在简单,在此就不赘述了。好了,下面,组件有事件了,接下来,我们要告诉这个事件,应该如何响应,接
方法类似于属性,大家应该自己去看吧,因为实在简单,在此就不赘述了。好了,下面,组件有事件了,接下来,我们要告诉这个事件,应该如何响应,接下来,为事件添加响应代码:
响应事件代码:

/// <summary> /// 消息事件的委托方法,如果用户订阅了事件,那么其实是由此委托进行消息参数的传递的 /// </summary> /// <param name="msg"></param> private void MessageHandler(string msg) { ConnectStatuDelegate messageEvent = ConnectedStatu; if (messageEvent != null) { messageEvent(msg); } } /// <summary> /// 私有方法,向事件发送消息 /// </summary> /// <param name="msg">欲发送的消息</param> private void ConnectHandler(string msg) { MessageHandler(msg); } /// <summary> /// 私有方法,向事件发送消息 /// </summary> /// <param name="msg">欲发送的消息</param> private void DisconnectHandler(string msg) { MessageHandler(msg); }
这里,我们看到了ConnectHandler以及DisconnectHandler函数,是不是明了很多呢?其实就是调用同一个委托方法,供TCP基础函数来针对不同的状态返回给事件订阅者不同的消息。而MessageHandler方法是一个经典的事件处理的描述。
到此为止,我们的组件已经拥有了方法、属性,而我们的组件代码也就到此结束,在下一篇的文章,我们将学会如何使用此组件,以及如何处理组件的默认属性。
TcpHelper组件的全部代码如下:

using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Threading; using System.Net; using System.Net.Sockets; namespace TCPComponent { public class TCPHelper : Component { private Boolean isclient; private Socket client; private String host; private Int32 port; #region 主机地址 /// <summary> /// 远程主机地址 /// </summary> public string HostName { get { return host; } set { if (value == null || value.Trim().Length == 0) { throw new ArgumentException("Invalid Host name."); } host = value; } } #endregion #region 端口号 /// <summary> /// 通讯使用的端口号 /// </summary> public int Port { get { return port; } set { if (value == 0 || value > 65535) { throw new ArgumentException("Invalid port Number."); } port = value; } } #endregion #region 是否为客户端 /// <summary> /// 指示是否为客户端 /// </summary> public bool IsClient { get { return isclient; } set { isclient = value; } } #endregion #region 方法体 /// <summary> /// 链接远程主机,用于测试网络的连通性 /// </summary> private void Connect() { try { IPEndPoint iep = new IPEndPoint(IPAddress.Parse(this.HostName), this.Port); client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); client.Connect(iep); ConnectHandler("连接成功!");//使用定义好的私有方法,向事件的订阅者发送“连接成功”消息 } catch (Exception e) { DisconnectHandler(e.Message);//使用定义好的私有方法,向事件的订阅者发送异常消息 } finally { DisconnectHandler("断开连接!");//使用定义好的私有方法,向事件的订阅者发送“断开连接”消息 client.Close(); } } #endregion #region /// <summary> /// 线程委托,用于返回连接状态等信息 /// </summary> /// <param name="msg">传出的参数,在实际调用中类似于事件的Args参数</param> public delegate void ConnectStatuDelegate(string msg); /// <summary> /// 返回连接状态事件,ConnectedStatu就是在属性设计器中能看到的事件了 /// </summary> public event ConnectStatuDelegate ConnectedStatu; /// <summary> /// 消息事件的委托方法,如果用户订阅了事件,那么其实是由此委托进行消息参数的传递的 /// </summary> /// <param name="msg"></param> private void MessageHandler(string msg) { ConnectStatuDelegate messageEvent = ConnectedStatu; if (messageEvent != null) { messageEvent(msg); } } /// <summary> /// 私有方法,向事件发送消息 /// </summary> /// <param name="msg">欲发送的消息</param> private void ConnectHandler(string msg) { MessageHandler(msg); } /// <summary> /// 私有方法,向事件发送消息 /// </summary> /// <param name="msg">欲发送的消息</param> private void DisconnectHandler(string msg) { MessageHandler(msg); } #endregion /// <summary> /// 多线程版本的连接远程主机,实际中,我们是调用此方法,所以其修饰为Public /// </summary> public void ConnectAsync() { new Thread(new ThreadStart(Connect)).Start(); } } }
参考文档:
http://www.cnblogs.com/mapserver/category/65343.html 感谢Mapserver朋友
http://www.cnblogs.com/OSCAR_NJU/archive/2008/04/02/1134231.html 感谢死刑犯朋友(汗)
作者:Jack Fan(初学博闻 of .NET CF/.Net)
出处:http://longqi293.cnblogs.com
编辑:http://www.xueit.com
本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。
精彩图集
精彩文章
热门标签
文件是否存在
共用体
到期破解
xMarquee
单例模式
内容
jsp操作MySQL
联动菜单
模拟登陆
中文说明
Uni
提取
定时删除
没有卖出
ASCII
B+树
SQL脚本
Symantec
php php中文繁体
自动注销
远程修改
表
数据库的连接
access函数
变量类型
基站
生成机制
length
用
CheckPoint
页面链接
回调
历史备份
delete使用方法
常见方法
对应错误码
Pallette
滑动
java读取文件
MAC系统
文有乱码
计算执行时间
Taglib
iis6.0
java单链表
3秒后
jfinal
两个字段
发短
所有进程
细的
系统资源
EXT4
designer
即时显示
左外连接
颜色
视频帧
clean
post请
赞助商链接
@CopyRight 2002-2008, 1SOHU.COM, Inc. All Rights Reserved QQ:1010969229