技术开发 频道

利用BackgroundWorker检测网络连接

  【IT168 专稿】如今的桌面程序再不像过去那样完全独立于网络运行了,各式各样的功能都是离不开Internet连接的。程序往往需要Internet连接来进行诸如自动更新、WebService调用等类似存取远程数据的操作,但是在实际存取远程数据之前我们最好能够确保远程连接是可用的,这样程序的流程和健壮性就可圈可点了。通过编程手段动态检测Internet连接非常耗时,所以若不使用多线程,那么在检测时程序界面将会死锁,主线程的一切操作都被侦测连接所占去,在检测远程连接是否可用时主界面经常死锁可不是什么好的用户体验。本篇文章我们将针对该问题创建一个C#组件,主要目标就是创建一个标准框架用于完成远程连接的测试工作,而这种测试必须是多线程的、后台执行的,当连接检测成功后必须通知主线程对连接可用的情形作出反应,譬如打开一个网页、启动自动更新以及开始调用WebService等等。

   在开始之前我们需要对该项目需要用到的相关技术做一下 List。
  1.我们的组件应该继承自Component,因为它不需要控件那样的外观和可视化的操作,我们仅需要后台探测Internet连接,并将探测结果以事件的形式传递到主线程。并且这个组件应该在任何.Net项目中可重用。
  2.我们不仅要探测Internet连接是否可用,还要检测指定的远程连接是否可用,譬如检测特定的WebService是否可用等等。这就要求我们不能简单使用Win32API或者WMI来检测网卡或者ADSL的运行状态来表示Internet连接。
  3.必须使用多线程后台检测连接,推荐使用BackgroundWorker。
  4.检测完毕必须通知主线程进行相应操作,线程间操作非事件莫属。
  5.主界面应该对不同的连接状态做出可视化的响应,这也必须借助事件来完成。

  在检测Internet连接的方法上,我们采用了另辟蹊径的策略。可以想象,任何一个客户程序需要连接Internet时肯定会有一个地址,这个地址无非是包含了一个ip地址或域名以及端口数据罢了,通过这个地址客户程序和远程主机建立连接来进行数据交换。那我们的客户程序就直接检测这个地址可用与否来近似判断Internet连接是否可用,地址可用证明Internet连接也可用,地址不可用证明两点:1、地址无效;2、Internet连接不可用。但是地址无效的可能性很小,首先程序员不可能提供一个无效地址让客户程序去尝试连接,再有服务器端瘫痪的可能性也不大,譬如尝试连接www.microsoft.com 或者 www.google.cn
 

0
相关文章