在很多的项目开发时,需要服务通过异步方式返回信息并更新相应控件的信息,如图表、列表的定时刷新,如果不通过异步的方式的话,网络缓慢,或者服务较多的话,就会造成主程序的卡顿现象,通过这种方式可以有效的解决卡顿的问题。
1.工具类
public class AsynDataUtils
{
DataResultCallBack _callback;
public void AsynGetData(string tagUrl,DataResultCallBack callback)
{
try
{
_callback = callback;
AsyncGetWithWebRequest(tagUrl, new AsyncCallback(ReadCallback));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
private void ReadCallback(IAsyncResult asynchronousResult)
{
try
{
var request = (HttpWebRequest)asynchronousResult.AsyncState;
request.Timeout = 5000;
request.Method = "GET";
request.UserAgent = HttpWebResponseUtility.DefaultUserAgent;
var response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
var resultString = streamReader.ReadToEnd();
Console.WriteLine(resultString);
if (_callback != null)
{
_callback(resultString);
}
}
}
catch (Exception ex)
{
}
}
private void AsyncGetWithWebRequest(string url, AsyncCallback callback)
{
var request = (HttpWebRequest)WebRequest.Create(new Uri(url));
request.BeginGetResponse(callback, request);
}
}
2.定义一个委托回调
public delegate void DataResultCallBack(string name,string data);
3.使用方法
//异步方式请求数据
new AsynDataUtils().AsynGetData(url, DataResultCallBack);
//在这个方法里面接收回调的返回信息
private void DataResultCallBack(string data)
{
//解析返回的数据
}