私はC#とプログラミング全体でかなり新しいです。Ping()。原因の遅れを送信する
私は、いくつかの大きなウェブサイトにping時間を測定するような小さなアプリケーションを作ることにしました。接続の問題が発生したときには簡単に見えます... 今私の問題は、 pingを要求すると、プログラム全体がフリーズし、しばしばクラッシュします。
long Google = new Ping().Send("google.com").RoundtripTime;
私はC#とプログラミング全体でかなり新しいです。Ping()。原因の遅れを送信する
私は、いくつかの大きなウェブサイトにping時間を測定するような小さなアプリケーションを作ることにしました。接続の問題が発生したときには簡単に見えます... 今私の問題は、 pingを要求すると、プログラム全体がフリーズし、しばしばクラッシュします。
long Google = new Ping().Send("google.com").RoundtripTime;
アプリケーションがフリーズをping要求は、ユーザーインターフェイスを表示し、同じスレッド上で実行されているので:
これは私が使用していたコードです。したがって、アプリケーションは、他の処理を続行する前に、pingの応答を待っています。 pingの応答時間が長ければ長いほど、アプリケーションはロックアップ状態になります。
あなたがPing.Async()
方法の使用に切り替える場合は、実際のPing要求をバックグラウンドで行うことができ、したがって、そのようなUIと干渉しない:
long Google = -1;
var ping = new Ping();
ping.PingCompleted += (s,a) => Google = a.Reply.RoundtripTime;
ping.SendAsync("google.com",null);
は、しかし、あなたはまだあなたを行う必要がありますアプリケーションは応答が戻ったときにそのUIを新しい値で更新します。上記の例では、ローカルのGoogle
変数のみがpingの結果で更新されますが、UIスレッドは値が変更されたことを認識しません。
どのようなフレームワーク(Winforms、WPF、Console)があなたのUIにどのような力を与えているのか、実際にあなたの質問に指定していないUIをどのように設定しているのかによって少し異なります。
私は取得しているようです - 1となる。 –
@ JariSchockaert、この回答は完全なコードではありません。 pingは現在非同期呼び出しとして実行されているため、コードは結果が返されるのを自動的に待機しないため、-1の初期値はまだ更新されません。リンクされた[MSDNページ](https://msdn.microsoft.com/en-us/library/ms144961(v = vs.110).aspx)の例は、結果を待つ正しい方法を持っています自分の意図によります)。代わりにその例に従ってください。 – Adrian
これは同期的に呼び出しているからです。非同期メソッドを使用しています - https://msdn.microsoft.com/en-us/library/ms144961(v=vs.110).aspx – Lloyd