实例.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
本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。
精彩图集
精彩文章
热门标签
CentOS5.2
soap协议
注
性能计数器
找不到IP
汉字转拼音
winrar
CHTSli
删除表
modify
校验ip
测
非成员函数
特定行
show
文档保存为
post请求
数字格式化
python模块
链接字符串
Assert
V-P交互
listview
程序员
成功
短信猫
C+
print()
ORA-27067
当前
p2p文件传输
php php中通
联想词
php php动态
jpaginate
compre
外观模式
恢复数据库
微信打开网页
加载js文件
光标定位
事务处理
comment命令
超大数据
filecmp
php解压文件
php PHP json
map
nextSibling
操作
搜索结果
内容缓存
二叉树算法
forwarded
生成随机字符
程序多次启动
$(this)
error_report
k均值算法
存取控制
赞助商链接
@CopyRight 2002-2008, 1SOHU.COM, Inc. All Rights Reserved QQ:1010969229

