实例.net CF组件编程之Tcp的小程序第2篇为组件添加事件(2)
方法类似于属性,大家应该自己去看吧,因为实在简单,在此就不赘述了。好了,下面,组件有事件了,接下来,我们要告诉这个事件,应该如何响应,接
方法类似于属性,大家应该自己去看吧,因为实在简单,在此就不赘述了。好了,下面,组件有事件了,接下来,我们要告诉这个事件,应该如何响应,接下来,为事件添加响应代码:
响应事件代码:
Code [http://www.xueit.com]
/// <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组件的全部代码如下:
Code [http://www.xueit.com]
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
本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。
精彩图集
精彩文章
热门标签
搜索
$_SESSION
iis环境
发短
删除数组
usort
CMD命令
snprintf
字符串连接
三维数组
方块
数据库主键
JoshChen
上传进度
不同顺序排
杨辉三角形
windows命令行
windows换行符
网址缩短
代码运行
淘宝API
提供
CentOS6.3
动态删除div
须要
主从延时
getservbynam
横竖屏
tbody
粘滞键后门
步骤
常规错误
音序
1.01
Web框架
通信模块
text内容
远程控制
$$
类成员
主键设计
__setattr__
sstream
文件执行
邮箱
当前年月日
win32com
自定义图片
企业
逐行读取文件
短链接
label
扫描
追踪器
多张
魔术方
实参
register_shu
Mail发邮件
电话
赞助商链接
@CopyRight 2002-2008, 1SOHU.COM, Inc. All Rights Reserved QQ:1010969229

