我对C#和整个编程都很陌生。
我决定制作一个小应用程序来测量几个大型网站的ping时间,以便在遇到连接问题时很容易看到... 现在我的问题是,每次程序发送ping请求时,整个程序都会冻结并经常崩溃。
这是我正在使用的代码:
long Google = new Ping().Send("google.com").RoundtripTime;
答案 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,你没有在你的问题中真正指定。