Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Ping使整个程序崩溃_C#_Winforms_Ping - Fatal编程技术网

C#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来围绕相关代

我正在构建一个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...");
}

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

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

首先在您的事件处理程序中检查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块之外抛出异常无论你如何努力让别人独立思考。。总有人会毁掉结局。