¿Cómo devolver respuestas HttpClient asíncronas a WinForm?
Hasta ahora, he estado haciendo llamadas HttpWebRequest sincrónicas en aplicaciones WinForms. Quiero comenzar a hacerlo de forma asincrónica para no bloquear el hilo de la interfaz de usuario y colgarlo. Por lo tanto, estoy intentando cambiar a HttpClient, pero también soy nuevo en async y tareas y todavía no lo entiendo.
Puedo iniciar la solicitud y obtener una respuesta y aislar los datos que quiero (resultado, frase de frase, encabezados, código) pero no sé cómo recuperarlos para mostrarlos en textBox1. También necesito capturar ex.message y volver al formulario si se produce un mensaje de tiempo de espera o no se puede conectar.
Cada ejemplo que veo tiene los valores escritos en Console.WriteLine () en el momento en que están disponibles, pero necesito que vuelvan al formulario para su visualización y procesamiento y me cuesta entender cómo.
Aquí hay un ejemplo simple:
namespace AsyncHttpClientTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "calling Test()...\r\n";
DownloadPageAsync();
// need to get from DownloadPageAsync here: result, reasonPhrase, headers, code
textBox1.AppendText("done Test()\r\n");
}
static async void DownloadPageAsync()
{
// ... Use HttpClient.
using (HttpClient client = new HttpClient())
{
try
{
using (HttpResponseMessage response = await client.GetAsync(new Uri("http://192.168.2.70/")))
{
using (HttpContent content = response.Content)
{
// need these to return to Form for display
string result = await content.ReadAsStringAsync();
string reasonPhrase = response.ReasonPhrase;
HttpResponseHeaders headers = response.Headers;
HttpStatusCode code = response.StatusCode;
}
}
}
catch (Exception ex)
{
// need to return ex.message for display.
}
}
}
}
}
¿Alguna sugerencia o consejo útil?