Я использую функцию, которая проверяет, является ли сайт онлайн или автономным, моя проблема заключается в том, что у меня есть более 10 сайтов, которые проверяются на предмет доступности, и она начинает отставать от моего приложения. Это код, который я использую,
private bool Ping(string url, Label label)
{
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Timeout = 300;
request.AllowAutoRedirect = false;
request.Method = "HEAD";
using (var response = request.GetResponse())
{
label.Text = "Online";
label.ForeColor = Color.LimeGreen;
return true;
}
}
catch
{
label.Text = "Offline";
label.ForeColor = Color.DarkRed;
return false;
}
}
Я предполагаю, что причина, по которой приложение продолжает висит, - это из-за таймаута, когда там, по меньшей мере, на 15 сайтах Pinged потребуется некоторое время, есть ли способ, которым я могу изменить это, чтобы он не влиял на производительность приложений. Я бы хотел, чтобы Ping сайтов в таймер, так что каждые 10-30 секунд приложение снова засылает сайты.
Любые идеи относительно того, что мне нужно изменить, чтобы достичь этого?
Вы наблюдаете, как приложение висит, потому что вы блокируете поток пользовательского интерфейса. Лучший способ избежать этого - использовать асинхронную модель программирования. Если вы используете С# 5 и.net 4.5, проще всего использовать ключевые слова async/await.
Вы должны изменить подпись метода на:
private async Task<bool> Ping(string url, Label label)
и изменить код на:
using (var response = await request.GetResponseAsync())