Ping()。发送导致滞后

时间:2016-12-13 23:22:05

标签: c# c#-4.0

我对C#和整个编程都很陌生。

我决定制作一个小应用程序来测量几个大型网站的ping时间,以便在遇到连接问题时很容易看到... 现在我的问题是,每次程序发送ping请求时,整个程序都会冻结并经常崩溃。

这是我正在使用的代码:

long Google = new Ping().Send("google.com").RoundtripTime;

1 个答案:

答案 0 :(得分:2)

您的应用程序冻结,因为ping请求正在显示您的用户界面的同一个线程上执行。因此,应用程序正在等待ping的响应,然后才能继续执行其他操作。 ping响应的时间越长,应用程序处于锁定状态的时间就越长。

如果您切换到使用Ping.Async()方法,实际的Ping请求可以在后台完成,因此不会干扰用户界面,如下所示:

long Google = -1;
var ping =  new Ping();
ping.PingCompleted += (s,a) => Google = a.Reply.RoundtripTime;
ping.SendAsync("google.com",null);

但是,当响应返回时,您仍然必须使用新值更新其UI。以上示例仅仅使用ping的结果更新本地Google变量,但您的UI线程将不知道该值已更改。

你究竟是如何做到这一点将取决于什么框架(Winforms,WPF,控制台)为你的用户界面供电,以及你如何设置你的UI,你没有在你的问题中真正指定。