class AsyncForm : Form
{
Label label;
Button button;
public AsyncForm()
{
label = new Label { Location = new Point(10, 20), Text = "Length" };
button = new Button { Location = new Point(10, 50), Text = "Click" };
button.Click += DisplayWebSiteLength;//包装事件处理程序
AutoSize = true;
Controls.Add(label);
Controls.Add(button);
}
async void DisplayWebSiteLength(object sender, EventArgs e)
//sender {Text = "Click"} e是坐标
{
label.Text = "Fetching...";
using (HttpClient client = new HttpClient())
//client {System.Net.Http.HttpClient}
{
string text = await client.GetStringAsync("http://csharpindepth.com");
//text 比较长 开始获取页面
label.Text = text.Length.ToString();//更新UI
}
}
static void Main()//异步地显示页面长度 异步类型
{
Application.Run(new AsyncForm());
}
}
网络延迟会让应用程序迟钝,如果有异步编程就不会延迟。
简单地创建了UI,并直接为按钮绑定了事件处理程序。有趣的是 DisplayWebSiteLength
方法。按下按钮,将获取文本,并在便签中显示HTML的字符长度。不管操作是否成功,
HttpClient都会恰当地进行释放。
按下按钮,出现数字