0

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

我正在使用 System.Net.NetworkInformation.Ping 类和 SendAsync 方法,以及处理结果的方法。

当用户指定不存在的计算机名称时,就会出现我遇到的问题。但是,我在 Application.Run(new Form()) (整个表单的主要方法)处获得了 TargetInvocationException,而不是 Ping 向我的回调方法返回错误。我曾尝试使用 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 属性。当它不为空时尝试使用其他属性是有保证的。从 MSDN 中的 PingCompletedEventArgs.Error 属性文档:

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

于 2012-04-03T22:44:56.390 回答
-1

好吧,由于您的异常处理程序没有受到打击,因此它必须在发生错误的代码的另一部分中。

于 2012-04-03T21:19:44.097 回答