今天跟着网上一篇文章学用C#写一个局域网IP扫描的小程序,运行后,发现如果某个IP不存在,执行
IPHostEntry myScanHost = Dns.GetHostByAddress(myScanIP);
这句就会等很久。有没有什么办法提高速度呢?我现在增加了一个Thread,本意是想用两个Thread一个执行单数IP的查询,一个Thread执行双数IP的查询。但执行的时候才发现不是两个Thread一起执行,是先执行完一个再执行另一个,和使用单Thread一样的效果怀疑自己没有写对,该怎么写呢?求助啊!!!

解决方案 »

  1.   

    附带问一个:如果程序中还有循环在执行,在退出按钮中如何中断它并关闭?如果直接执行Application.Exit();是不是容易出问题呢?
      

  2.   

    如果一直再循环中加个标志退出就可以了,如果循环到没一步然后在等待什么事件的完成加标志就不行,就只能Abort(),不过这样会有异常所以你给他加个try.. catch..在局域网内扫描那些主机是否存在建议使用Udp广播,建立一个侦听线程,如果接收到应答就做相应处理,处理完后再while回去,如果没接收到应答就会一直处于等待(堵塞)状态,这时候你想退出就的Abort()了,当然使用异步方式会更好!
      

  3.   

    侦听线程处于等待状态你也可以直接Send一个特殊包给自己,然后正常退出
      

  4.   

    qiezic(笨鸟):如何判断标志呢?UDP广播又如何使用?能说详细一点吗?
    刚学,不懂,呵呵~~~
      

  5.   

    去翻翻网络通讯的书,一般书上都有类似的例子!
    至于标志你可以发一串特别的字符,比如说不同与其他主机的应答消息就可以UDP广播我也没弄过,不过不难,你找下资料就可以了(应该是使用UdpClient这个类,你搜索一下)