C#Ping使整个程序崩溃
我正在构建一个C#windows窗体应用程序,它可以按名称ping多台计算机,用户可以指定名称 我使用System.Net.NetworkInformation.Ping类和SendAsync方法,并使用一个方法来处理结果 当用户指定一个不存在的计算机名时,就会出现我遇到的问题。但是,我没有Ping向回调方法返回错误,而是在Application.Run(new Form())(整个表单的主方法)处得到了TargetInvocationException。我尝试过用try/catch来围绕相关代码,但他们似乎从未捕捉到异常 以下是ping的相关代码:C#Ping使整个程序崩溃,c#,winforms,ping,C#,Winforms,Ping,我正在构建一个C#windows窗体应用程序,它可以按名称ping多台计算机,用户可以指定名称 我使用System.Net.NetworkInformation.Ping类和SendAsync方法,并使用一个方法来处理结果 当用户指定一个不存在的计算机名时,就会出现我遇到的问题。但是,我没有Ping向回调方法返回错误,而是在Application.Run(new Form())(整个表单的主方法)处得到了TargetInvocationException。我尝试过用try/catch来围绕相关代
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...");
}
因为您的异常处理程序没有被命中,所以它必须位于代码中发生错误的另一部分。因为您的异常处理程序没有被命中,所以它必须位于代码中发生错误的另一部分。首先在您的事件处理程序中检查e.error属性。当其他属性不为null时,尝试使用这些属性是一种保证。从MSDN中的PingCompletedEventArgs.Error属性文档: 如果在异步操作期间引发异常,则类会将该异常分配给Error属性。客户端应用程序的事件处理程序委托应在访问从AsyncCompletedEventArgs派生的类中的任何属性之前检查Error属性;否则,该属性将引发一个TargetInvocationException,其InnerException属性包含对Error的引用
首先在PingCompleted事件处理程序中检查e.Error属性。当其他属性不为null时,尝试使用这些属性是一种保证。从MSDN中的PingCompletedEventArgs.Error属性文档: 如果在异步操作期间引发异常,则类会将该异常分配给Error属性。客户端应用程序的事件处理程序委托应在访问从AsyncCompletedEventArgs派生的类中的任何属性之前检查Error属性;否则,该属性将引发一个TargetInvocationException,其InnerException属性包含对Error的引用
查看TargetInvocationException的InnerException的堆栈跟踪,以找出异常的来源。或者尝试在单独的线程上使用Send检查PingCompletedEventHandler。您正在异步执行此操作,因此并非所有操作都发生在try-catch块中。您的事件将单独生成。请查看TargetInvocationException的InnerException的堆栈跟踪,以找出异常的来源。或者尝试在单独的线程上使用Send检查PingCompletedEventHandler。您正在异步执行此操作,因此并非所有操作都发生在try-catch块中。您的事件将单独生成。SendAsync可以在try/catch块之外引发异常无论您如何努力让某人独立思考都没有关系。。其他人总是要破坏结局。SendAsync可以在try/catch块之外抛出异常无论你如何努力让别人独立思考。。总有人会毁掉结局。