C#Ping崩溃整个程序

时间:2012-04-03 21:17:06

标签: c# winforms ping

我正在构建一个C#windows窗体应用程序,它按名称ping多台计算机,用户可以指定。

我正在使用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...");
}

2 个答案:

答案 0 :(得分:3)

首先在PingCompleted事件处理程序中检查e.Error属性。当它不为null时,尝试使用其他属性是保证kaboom。从MSDN中的PingCompletedEventArgs.Error属性文档:

  

如果在异步操作期间引发异常,该类将为Error属性分配异常。客户端应用程序的事件处理程序委托应该在访问从AsyncCompletedEventArgs派生的类中的任何属性之前检查Error属性。否则,该属性将引发 TargetInvocationException ,其InnerException属性包含对Error的引用。

答案 1 :(得分:-1)

因为您的异常处理程序没有被命中,所以它必须位于代码中发生错误的其他部分。