私は最初のアプリを書いていますが、問題が発生しました。私のforeachループが終了した後に到達不能なアドレスが入力された場合、私のアプリケーションはBreakモードに入りますが、foreachが結果を得ると、通常通り処理されます。SendPingAsyncは、すべてのホストが到達不能な場合に休憩モードに入ります。C#
これは、例外をスローするコードの一部です:スロー
は、私はのtry/catchでそれを処理しようとした:キャッチは何もしないと、プログラムがまだモードを解除入るしかし例外:がmscorlib.dll で 'System.ArgumentOutOfRangeExceptionが' 私は私が得る間違った店舗番号を指定した場合
private async void Button_Click(object sender, RoutedEventArgs e) { /// Verify that input box is not blank if (string.IsNullOrWhiteSpace(inputBox.Text)) { MessageBox.Show("Cannot be left blank !", "Error"); return; } /// Creates a list of Gateway options to try from string[] gatewayArray = { "cadg0", "frdg0", "dedg0", "gbdg0", "iedg0", "usdg0", "dg", "dg0" }; /// Specifies where to get store number from string storeNumber = inputBox.Text; string pingReply; string pingStatus; clearButton_Click(sender, e); Ping ping = new Ping(); foreach (string gateway in gatewayArray) try { /// Replace store number with "Wait" text and changes color of box to red. inputBox.Text = "Please Wait..."; inputBox.Background = Brushes.Red; /// Pings selected store using Async method PingReply reply = await ping.SendPingAsync(gateway + storeNumber, 2000); pingReply = reply.Address.ToString(); pingStatus = reply.Status.ToString(); /// Displays results of Ping ipOne.Clear(); ipOne.Text = pingReply; statusOne.Clear(); statusOne.Text = pingStatus; if (statusOne.Text == "Success") { statusOne.Text = "- ONLINE -"; statusOne.Background = Brushes.LightGreen; } else { statusOne.Background = Brushes.Orange; } /// Get name of host IPHostEntry ipHostOne = Dns.GetHostEntry(pingReply); string ipOneName = ipHostOne.HostName; ipOneName = ipOneName.Substring(0, ipOneName.LastIndexOf(".") - 10); nameOne.Text = ipOneName.ToUpper(); } catch (ArgumentOutOfRangeException ex) { MessageBox.Show(ex.Message); } catch (PingException) { /// Catches exceptions and continues /// MessageBox.Show("Unreachable !"); }
未処理の 'System.ArgumentOutOfRangeException'型の例外が発生しました in mscorlib.dll StartIndexは0より小さくすることはできません。
The program '[19616] SbPinger.exe' has exited with code -1 (0xffffffff).
catch (ArgumentOutOfRangeException ex)
{
MessageBox.Show(ex.Message);
}
。
私のプログラムは、可能なすべてのデフォルトゲートウェイをpingし、見つかった場合はIPを返し、そのネットワーク上の個々のPCにpingを実行します。 Pingがゲートウェイに到達しない場合を除いて、他のすべてが機能します。 C#を数週間しか使用していなかったので、私には簡単に行きましょう。どんな助けでも大歓迎です。
ピーターだから、
'string.IsNullOrWhiteSpace'は文字列が空であるかどうかをチェックするので、' inputBox.Text == "" 'は冗長です。また、ここでは間違っています。なぜなら、最初にnullをチェックすべきだからです。つまり、例外のコールスタックもここに掲載する必要があります。 – Clemens
これが更新されました。それ以外のTry/catchコードも追加されました。 –
コールスタックはどうですか?そして 'ipOneName.Substring(0、ipOneName.LastIndexOf("。 ") - 10)'は疑わしく見えます。あなたは常に '.'が存在し、その位置は開始から少なくとも10文字であると確信していますか? – Clemens