интервал таймера удваивается после каждого тика

#c# #winforms

#c# #winforms

Вопрос:

Я хочу, чтобы видимая панель была подключена к Интернету, а также скрывалась, когда пользователь находится в автономном режиме в c # WinForms.

То, что я пробовал, хорошо работает для первых двух тиков таймера. Если интернет отключен, панель появится и исчезнет при повторном подключении к Интернету.

После повторного тестирования приложения, когда я отключаю Wi-Fi в третий раз, панель появляется через 10 секунд, в то время как я установил интервал в 5 секунд (5000) в свойствах таймера, и аналогично панель исчезает через 10 секунд, если я подключаю Wi-Fi.

и этот интервал продолжает увеличиваться, например, от 5 до 10, а затем от 10 до 20 секунд.

Ниже приведен мой код, над которым я работаю для достижения этой функциональности.

     public static async Task<bool> CheckForInternetConnection()
    {
        bool result = false;
        await Task.Run(() =>
        {

            try
            {
                using (var client = new WebClient())
                using (client.OpenRead("http://google.com/generate_204"))
                    result = true;
            }
            catch
            {
                result = false;
            }
        });
        return resu<
    }


    public async void GetResult()
    {
        var get = await CheckForInternetConnection();
        if (get)
        {
            lbl_warning.Visible = false; //connected
        }
        else
        {
            lbl_warning.Visible = true; //not connected  
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        GetResult();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        timer1.Start();
    }
 

Я хочу проверять наличие Интернета каждые 5 секунд, и это должно работать быстро и без задержек,
также подскажите мне, это хороший способ использования таймера.
Я хотел бы знать, можно ли использовать таймер другими способами с точки зрения производительности.

Комментарии:

1. Это сработало для меня. Любой другой код, который вы не показываете?

2. Нет. Вот и все. Но это работает для запуска нескольких тиков, и этот интервал в 5 секунд становится слишком длинным для отображения предупреждающей надписи.

3. Чтобы определить, проблема в таймере или в веб-браузере, вы пытались сделать что-то еще в timer1_tick ?, например Debug.WriteLine("Tick " Datetime.UtcNow); , интервал также увеличивается? Что произойдет, если вы Debug.WriteLine укажете время непосредственно перед и сразу после Client.OpenRead ?