C# 我可以使用Ping.SendAsync来确定我是否有';I don’很长一段时间没有收到IP地址的回复了吗?

C# 我可以使用Ping.SendAsync来确定我是否有';I don’很长一段时间没有收到IP地址的回复了吗?,c#,.net,winforms,network-programming,ping,C#,.net,Winforms,Network Programming,Ping,我有一个应用程序,其中包含一个具有IP地址列表的listview,我正在使用Ping.SendAsync Ping地址 private void timer1_Tick(object sender, EventArgs e) { foreach (ListViewItem lvitem in listView1.Items) { string input = lvitem.Text; ; string ip

我有一个应用程序,其中包含一个具有IP地址列表的listview,我正在使用Ping.SendAsync Ping地址

 private void timer1_Tick(object sender, EventArgs e)
    {
        foreach (ListViewItem lvitem in listView1.Items)
        {
            string input = lvitem.Text; ;
            string ip = input ;
            Ping pingSender = new Ping();
            pingSender.PingCompleted += new PingCompletedEventHandler(ping_PingCompleted);
            pingSender.SendAsync(ip, 1000, lvitem);
            ((IDisposable)pingSender).Dispose();
        }
    }

 private static void ping_PingCompleted(object sender, PingCompletedEventArgs e)
    {
        ListViewItem lvitem = e.UserState as ListViewItem;
        if (e.Reply.Status == IPStatus.Success)
        {
            lvitem.ImageIndex = 0; //a "check" image
        }
        else
        {
            lvitem.ImageIndex = 1; //a "X" image
        }

        GC.Collect();

    }

我现在有两个结果,如果是成功的,或者是别的什么。超时请求在某些IP地址上很常见,但大多数情况下它们都会返回答复。如果我很长时间没有从IP地址获得成功答复,我想显示不同的图像,我该如何执行此操作?

您可以检查是否与以下内容相等:

在分配的时间内未收到ICMP回显回复。允许回复的默认时间为5秒。可以使用接受超时参数的Send或SendAsync方法更改此值

当前实现有1秒超时,这意味着任何超过指定时间的
PingReply
对象都应标记为超时

旁注:

由于某种原因,您在异步操作执行时正在处理
Ping
类,我不确定该代码实际如何为您工作,但您应该在检索结果后实际完成操作后才进行处理。事实上,我会让GC自己解决这个问题

此外,调用
GC.Collect
应该很少发生。有关更多指南,请参见问题