Из моего WPF мне нужно постоянно проверять подключение к Интернету, доступное подключение установлено на зеленый, если нет подключения, установлено на красный.
Из моего кода ниже у меня есть следующая проблема:
Не могли бы вы сказать мне, где я делаю ошибку?
private DispatcherTimer BackgroundAsyncTasksTimer;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
BackgroundAsyncTasksTimer = new DispatcherTimer();
BackgroundAsyncTasksTimer.Interval = TimeSpan.FromMilliseconds(2000);
BackgroundAsyncTasksTimer.Tick += BackgroundAsyncTasksTimer_Tick;
BackgroundAsyncTasksTimer.Start();
}
private async void BackgroundAsyncTasksTimer_Tick(object sender, object e)
{
try
{
bool tresult = await IsWebsiteUp_Ping("https://google.com");
if (tresult)
{
this.einternetcoxn.Fill = (SolidColorBrush)new BrushConverter().ConvertFromString("#841c34");
}
else
{
this.einternetcoxn.Fill = (SolidColorBrush)new BrushConverter().ConvertFromString("#00ff00");
}
}
catch(Exception es)
{
Console.WriteLine("Source :{0} ", es.ToString());
}
}
private async Task<bool> IsWebsiteUp_Ping(string url)
{
try
{
Ping ping = new Ping();
var hostName = new Uri(url).Host;
byte[] buffer = Encoding.ASCII.GetBytes("samplestring");
PingReply result = await ping.SendPingAsync(hostName, 500, buffer);
return result.Status == IPStatus.Success;
}
catch (System.Net.Sockets.SocketException e)
{
Console.WriteLine("SocketException caught!!!");
Console.WriteLine("Source : " + e.Source);
Console.WriteLine("Message : " + e.Message);
return false;
}
}
Исключения:
à System.Net.Dns.GetHostAddresses(String hostNameOrAddress)
à System.Net.NetworkInformation.Ping.ContinueAsyncSend(Object state)
--- Fin de la trace de la pile d'exception interne ---
à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
à Maintenance.MainWindow.<IsWebsiteUp_Ping>d__19.MoveNext() dans C:\Users\user1\source\repos\Maintenance\Maintenance\MainWindow.xaml.cs:ligne 252
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
à Maintenance.MainWindow.<BackgroundAsyncTasksTimer_Tick>d__14.MoveNext() dans C:\Users\\user1\source\source\repos\Maintenance\Maintenance\MainWindow.xaml.cs:ligne 152
Exception thrown: 'System.Net.NetworkInformation.PingException' in mscorlib.dll
Source :System.Net.NetworkInformation.PingException: Une exception s'est produite lors d'une demande PING. ---> System.Net.Sockets.SocketException: Hôte inconnu
à System.Net.Dns.GetAddrInfo(String name)
à System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
à System.Net.Dns.GetHostAddresses(String hostNameOrAddress)
à System.Net.NetworkInformation.Ping.ContinueAsyncSend(Object state)
--- Fin de la trace de la pile d'exception interne ---
à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
à Maintenance.MainWindow.<IsWebsiteUp_Ping>d__19.MoveNext() dans C:\Users\\user1\source\source\repos\Maintenance\Maintenance\MainWindow.xaml.cs:ligne 252
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
Я пытался использовать приведенный выше код, но я не могу понять или понять, где я делаю неправильно.
Согласно документам, SendPingAsync
может бросить SocketException
или PingException
. Он выдает PingException
, а ваш код ловит SocketException
.
Отвечает ли это на ваш вопрос? проверить наличие интернет-соединения в c#