【发布时间】:2012-04-03 21:17:05
【问题描述】:
我正在构建一个 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...");
}
【问题讨论】:
-
看一下TargetInvocationException的InnerException的StackTrace,看看异常是从哪里来的。
-
或者尝试在单独的线程上使用 Send 代替
-
检查您的 PingCompletedEventHandler。您正在执行此异步操作,因此并非所有内容都发生在您的 try catch 块中。您的事件将单独生成。