封装请求
创建一个Button;项目属性里输出类型改成“控制台应用程序”
public partial class Form1 : Form
{
private int a = 0;
public Form1()
{
InitializeComponent();
// 创建task任务对象
Task t = new Task(() =>
{
a = 10;
//异步的任务 如果直接使用全局变量,在task外面使用全局的
//时候,这个全局还是初始值,不是此处赋的值,原因此处代码是属于
//异步的,下面Console.WriteLine(a);执行在a=10的前面的,所以a还是
//0
});
t.Start();//开启任务
Console.WriteLine(a);
}
public Task<string> F1()
{
Task<string> t1 = Task.Run(() =>
{
string s1 = "150多完寸头渔民赶赴黄岩岛,备注不会撒网,装满搬砖";
return s1;
});
return t1;
}
}
运行时控制台会显示s1字符串内容;
双击按钮点击事件
private async void button1_Click(object sender, EventArgs e)
{
string s1 = await F1();
Console.WriteLine(s1);
//异步任务的里面数据怎么放在外边去使用?例如Task的异步回调函数里面的数据怎么使用?
//1 不能把异步任务呢里面的数据定义成全局的
//2 把异步任务里面数据通过return返回出去,但是使用异步任务,在异步任务前面添加await关键字
//在函数前面添加async
//如果想使用异步函数中数据的时候,可以通过返回值返回值出去,
//使用异步任务的时候通过await保证异步执行完再去取值,await只能使用使用在
//async函数中
Task<int> t2 = Task.Run(() =>
{
int aa = 100000;
return aa;
});
int aaa = await t2;// await等待t2异步任务执行完了再去执行下面代码
//async 异步函数
Console.WriteLine(aaa);
string s = await HttpGetASync("https://www.kuaikanmanhua.com/webs/comic-next/375872");
Console.WriteLine(s);
}
//把请求方法封装在异步函数中,
private Task<string> HttpGetASync(string url)
{
Task<string> t = Task.Run(() =>
{
WebRequest request = WebRequest.Create(url);
request.Method = "GET";
WebResponse response = request.GetResponse();
Stream st= response.GetResponseStream();
StreamReader sr = new StreamReader(st);
string data = sr.ReadToEnd();
st.Close();
sr.Close();
return data;
});
return t;
}
post请求:
控件:两个输入框textbox,一个按钮button,展示Label
按钮点击事件
//1 创建请求对象
WebRequest request = WebRequest.Create("http://192.168.113.74:3000/register");
//2 设置post请求
request.Method = "POST";
//3 设置超时时间
request.Timeout = 30000;
//4 设置请求内容类型 请求内容类型主要是针对传递是普通数据和传递图片而设置的,
request.ContentType = "application/x-www-form-urlencoded"; //主要针对传递数据是字符串格式
//5 设置请求数据
string data = "name="+this.textBox1.Text+"&psw="+this.textBox2.Text;//组织写入数据
byte[] bs = Encoding.UTF8.GetBytes(data);//转成字节数据
Stream postStream = request.GetRequestStream();// 传进传递数据流
// write方法 参数1字节数组,把字符串可以转成字节数组
// 参数2从哪个地方开始写入,从头开始写,写0,
// 参数3 写入的长度
postStream.Write(bs, 0, bs.Length);//写入数据
//6 获取响应
WebResponse response = request.GetResponse();//获取响应
Stream st = response.GetResponseStream(); //响应流
StreamReader sr = new StreamReader(st);//创建读取工具
string data1 = sr.ReadToEnd();//获取响应字符串
st.Close();
sr.Close();
this.label3.Text = data1;