TestConnection 函数实了现核心功能,即请求给定的 IP 和端口,并返回结果;其中通过调用 IAsyncResult.AsyncWaitHandle 属性的 WaitOne 方法来实现对超时的控制;
StartScan 方法中,在得到 IP 列表后,通过生成委托列表并异步调用这些委托来实现整个方法是异步的,不会阻塞 UI,而这些委托指向的方法就是 TestConnection 函数;
使用同步上下文 SynchronizationContext,可以保证调用方在原来的线程(通常是 UI 线程)上处理进度更新事件或扫描完成事件;
对于每个委托异步完成后,会执行回调方法 OnComplete,在它里面,对全局变量的操作需要加锁,以保证线程安全。
三、如何使用
最后来看一下如何使用,非常简单:
private void View_Loaded() { // 在界面 Load 事件中添加以下代码 ServerScanner.OnScanComplete += ServerScanner_OnScanComplete; ServerScanner.OnScanProgressChanged += ServerScanner_OnScanProgressChanged; // 扫描的端口号 ServerScanner.ScanPort = 7890; } private void StartScan() { // 开始扫描 ServerScanner.StartScan(); } private void ServerScanner_OnScanComplete(object sender, List<ConnectionResult> e) { ... } private void ServerScanner_OnScanProgressChanged(object sender, ScanProgressEventArgs e) { ... }
如果你有更好的建议或意见,请留言互相交流。
以上这篇在.NET中扫描局域网服务的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章: