和新年快乐:)
我需要检查公司中计算机的连接性。如果在线,我会检索这些信息,解锁一些按钮等。实际上,我需要按计算机的主机名来ping计算机。经过Google的一些搜索,我发现了以下代码。但是,如果主机名不存在或无法ping通,我会有一个无法捕获的异常。我需要尽快答复,并且不要冻结我的UI。
public static bool GetPing(string hostname)
{
if (hostname == null || hostname == string.Empty)
{
return false;
}
bool pingable = false;
try
{
Func<PingReply> pingDelegate = () => new Ping().Send(hostname);
IAsyncResult result = pingDelegate.BeginInvoke(r => pingDelegate.EndInvoke(r), null); // The exception comes here
//wait for thread to complete
result.AsyncWaitHandle.WaitOne(100);
pingable = result.IsCompleted;
Console.WriteLine("ping ok : " + pingable);
}
catch (Exception ex)
{
Console.WriteLine("Exception : " + ex.Message);
}
return pingable;
}
我还尝试了更多的“经典”方法,但是如果ping为KO,则答案太长了。
上面的代码就是这样简称:
private void Button_Click(object sender, RoutedEventArgs e)
{
string hostname = tb1.Text;
var IsOnline = GetPing(hostname);
if (IsOnline)
{
// Hostname ping ok
}
else
{
// Hostname do not ping
}
}
最后,当对主机名执行ping操作时,回复很快(对或错),但是如果为False,几秒钟后我的应用程序崩溃,并显示消息“用户代码未处理异常” ... 有人可以帮我吗?