【发布时间】:2018-06-26 07:04:33
【问题描述】:
我正在编写一个 winform 应用程序,我想发送一个 Http Post 请求并在主表单加载之前获得响应。到目前为止,我遇到以下情况:
如果我这样做,表单加载将发送请求,并且表单将立即加载。请求响应将稍后到达,但同时可以单击表单中的任何按钮(不是理想的)
private async void Form1_Load(object sender, EventArgs e)
{
//client is a HttpClient
//byteContent is a ByteArrayContent
using (HttpResponseMessage response = await client.PostAsync("theUrl",
byteContent))
{
response.EnsureSuccessStatusCode();
Trace.WriteLine(response.ToString());
}
}
所以我把代码改成了这个,我认为表单会在请求响应到达后加载。然而,并非如此,正在发生的事情是:表单出现在响应到达之前,但鼠标显示加载旋转形状,因此表单中的任何按钮都不可用。响应到达后,表单中的按钮变为可用。
这是正确的,但看起来不太好。
private async void Form1_Load(object sender, EventArgs e)
{
//client is a HttpClient
//byteContent is a ByteArrayContent
var PostTask = client.PostAsync("theUrl", byteContent);
PostTask.Wait(); //blocking here
using (HttpResponseMessage response = PostTask.Result)
{
response.EnsureSuccessStatusCode();
Trace.WriteLine(response.ToString());
}
}
做我想做的事情的正确方法是什么:
响应成功到达后只显示表单?
【问题讨论】:
标签: asynchronous async-await dotnet-httpclient