Не работает блокировка кнопки перед асинхронным методом и после го выполнения
Делаю запрос к сайту, сам запрос длится какое-то время 3 - 5 сек. Чтобы пользователь не тикаk снова по кнопке перед выполнением метода с запросом ее блокирую, а после уже выполнения питаюсь разблокировать. Методы как бы асинхронные но не работает, подскажите что не так сделал?
async Task<bool> Test()
{
try
{
var request = (HttpWebRequest)WebRequest.Create("https://mysitecom/prog-api/ver.php");
var postData = "v=" + Uri.EscapeDataString(progVer);
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
Console.WriteLine("END");
return true;
}
catch
{
return false;
}
}
private async void runPoster_Click(object sender, RoutedEventArgs e)
{
runPoster.IsEnabled = false;
await Test();
runPoster.IsEnabled = true;
}
Сейчас вишел с положения таким образом, не знаю на сколько это правильно но все же. Если можно проще подскажите.
async Task<bool> Test()
{
runPoster.IsEnabled = false;
string status = "";
await Task.Run(() =>
{
try
{
var request = (HttpWebRequest)WebRequest.Create("https://mysite.com/prog-api/ver.php");
var postData = "v=" + Uri.EscapeDataString(progVer);
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
Console.WriteLine(responseString);
if (responseString != progVer)
{
MessageBox.Show("Ваша версия программы устарела, скачайте новую версию!");
return;
}
status = "1";
return;
}
catch
{
MessageBox.Show("Сервис не доступен!");
return;
}
});
runPoster.IsEnabled = true;
if (status == "1")
{
return true;
}
else
{
return false;
}
}
private async void runPoster_Click(object sender, RoutedEventArgs e)
{
bool status = await Test();
if (status == false)
{
return;
}
MessageBox.Show("ВСЕ ОК!");
}
Источник: Stack Overflow на русском