代码如下:
private void button1_Click(object sender, EventArgs e)
        {
            var sr = new StreamReader("ips.txt");// 一个一个地读取ip地址列表
            while (true)
            {
                string str = sr.ReadLine();
                if (String.IsNullOrEmpty(str))
                    break;
                PingFunc(str);
            }
            sr.Close();
        }
        private void PingFunc(string str)
        {
            var testping = new System.Net.NetworkInformation.Ping();
            testping.PingCompleted += PingCompletedCallBack;
            testping.SendAsync(ip, null);// 异步执行ping命令
        }
       // ping完成后的处理事件
        private void PingCompletedCallBack(object sender, PingCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                listBox1.Items.Add("Ping Canncel");
                return;
            }
            if (e.Error != null)
            {
                listBox1.Items.Add(e.Error.Message);
                return;
            }            var reply = e.Reply;
            // 下边这个reply address不一定是你ping的那个ip
            var sbuilder = (string.Format("Reply Address: {0} ", reply.Address));
            sbuilder += (string.Format("Reply Status: {0} ", reply.Status));
            listBox1.Items.Add(sbuilder);
        }
由于异步执行返回的结果不一定是按照ip列表中的顺序来的,返回超时的ping总是比不超时的来的晚,
所以不知道哪个返回结果是属于ping的哪个ip,
对应不起来了.