#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
?