0

ユーザーが指定できる名前で複数のコンピューターにpingを実行するC#Windowsフォームアプリを構築しています。

System.Net.NetworkInformation.PingクラスとSendAsyncメソッドを使用しており、結果を処理するメソッドがあります。

私が抱えている問題は、ユーザーが存在しないコンピューター名を指定したときに発生します。ただし、Pingがコールバックメソッドにエラーを返すのではなく、Application.Run(new Form())(フォーム全体のメインメソッド)でTargetInvocationExceptionが発生します。関連するコードをtry/catchで囲んでみましたが、例外をキャッチしていないようです。

pingに関連するコードは次のとおりです。

Ping p = null;
try
{
    p = new Ping();
    p.PingCompleted += new PingCompletedEventHandler (updateUI);
    p.SendAsync(computername, 10, computername);
}
    catch (Exception)
{
    ((IDisposable)p).Dispose();
    MessageBox.Show("Ping Failed...");
}
4

2 に答える 2

4

PingCompletedイベントハンドラーで最初にe.Errorプロパティを確認します。nullでないときに他のプロパティを使用しようとすると、kaboomが保証されます。MSDNのPingCompletedEventArgs.Errorプロパティのドキュメントから:

非同期操作中に例外が発生した場合、クラスは例外をErrorプロパティに割り当てます。クライアントアプリケーションのイベントハンドラーデリゲートは、AsyncCompletedEventArgsから派生したクラスのプロパティにアクセスする前に、Errorプロパティを確認する必要があります。それ以外の場合、プロパティはErrorへの参照を保持するInnerExceptionプロパティでTargetInvocationExceptionを発生させます。

于 2012-04-03T22:44:56.390 に答える
-1

例外ハンドラーはヒットしていないので、エラーが発生しているコードの他の部分にある必要があります。

于 2012-04-03T21:19:44.097 に答える