在一个局域网中,需要检查所有机器是否能Ping通
System.Net.NetworkInformation.Ping类提供了几个方法:
- Send :同步方式发送一个ICMP数据包,返回PingReply
- SendPingAsync:异步方式发送ICMP数据包,返回Task<PingReply>
方式1:同步方式(主程序与Ping命令同步,多个Ping以同步方式运行)
此时,界面会阻塞,无法使用
for (int i = 1; i < 254; i++) {
PingReply reply1 = p1.Send("10.127.0."+i.ToString());
Console.WriteLine("10.127.0." + i.ToString()+":"+reply1.Status.ToString());
}
方式2:每个Ping以异步方式
此时,界面不会阻塞,但每个Ping之间是串行执行,效率也低
public async void test(){
for (int i = 1; i < 254; i++)
{
PingReply reply1 = await p1.SendPingAsync("10.127.0."+i.ToString());
Console.WriteLine("10.127.0." + i.ToString()+":"+reply1.Status.ToString());
}
}<

本文介绍了在C#中利用System.Net.NetworkInformation.Ping类进行网络通断检查的方法,包括同步和异步方式。重点讲述了通过并发执行多个异步Ping任务提高效率,利用Task.WhenAll等待所有任务完成,同时避免界面阻塞的问题。
最低0.47元/天 解锁文章
719





