Ping выдает исключения сокета/dns

Из моего WPF мне нужно постоянно проверять подключение к Интернету, доступное подключение установлено на зеленый, если нет подключения, установлено на красный.

Из моего кода ниже у меня есть следующая проблема:

  1. если нет подключения к Интернету или если я вытащу сетевой кабель rj45 или если я поставлю статический/случайный IP-адрес 192.168.192.90, 255.255.255.0, шлюз: 192.168.192.90, pref dns: 8.8.8.8, вместо этого пользовательский интерфейс не обновляется он выдает различные исключения.

Не могли бы вы сказать мне, где я делаю ошибку?

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()

Я пытался использовать приведенный выше код, но я не могу понять или понять, где я делаю неправильно.

Отвечает ли это на ваш вопрос? проверить наличие интернет-соединения в c#

Filburt 25.11.2022 15:36
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
83
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно документам, SendPingAsync может бросить SocketException или PingException. Он выдает PingException, а ваш код ловит SocketException.

Другие вопросы по теме