猿问
如何异步使用HttpWebRequest(.NET)?
如何异步使用HttpWebRequest(.NET)?
如何异步使用HttpWebRequest(.NET,C#)?
森林海
浏览 1618
回答 3
3回答
莫回无
使用HttpWebRequest.BeginGetResponse()HttpWebRequest webRequest;void StartWebRequest(){ webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null);}void FinishWebRequest(IAsyncResult result){ webRequest.EndGetResponse(result);}异步操作完成后调用回调函数。你至少得打个电话EndGetResponse()从这个功能。
0
0
0
慕慕森
考虑到答案:HttpWebRequest webRequest;void StartWebRequest(){ webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null);}void FinishWebRequest(IAsyncResult result){ webRequest.EndGetResponse(result);}您可以发送请求指针或类似于以下内容的任何其他对象:void StartWebRequest(){ HttpWebRequest webRequest = ...; webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), webRequest);}void FinishWebRequest(IAsyncResult result){ HttpWebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse;}问候
0
0
0
弑天下
到目前为止,每个人都错了,因为BeginGetResponse()在当前线程上做一些工作。从文献资料:在此方法成为异步之前,BeginGetResponse方法需要完成一些同步设置任务(例如DNS解析、代理检测和TCP套接字连接)。因此,不应在用户界面(UI)线程上调用此方法,因为在引发错误或该方法成功之前,可能需要相当长的时间(取决于网络设置)来完成初始的同步设置任务。因此,要正确地做到这一点:void DoWithResponse(HttpWebRequest request, Action<HttpWebResponse> responseAction){ Action wrapperAction = () => { request.BeginGetResponse(new AsyncCallback((iar) => { var response = (HttpWebResponse)((HttpWebRequest)iar.AsyncState).EndGetResponse(iar); responseAction(response); }), request); }; wrapperAction.BeginInvoke(new AsyncCallback((iar) => { var action = (Action)iar.AsyncState; action.EndInvoke(iar); }), wrapperAction);}然后,您可以对响应进行所需的操作。例如:HttpWebRequest request;// init your request...then:DoWithResponse(request, (response) => { var body = new StreamReader(response.GetResponseStream()).ReadToEnd(); Console.Write(body);});
0
0
0
随时随地看视频
慕课网APP
相关分类
C#
typedef入门问题
1 回答
.NET
.net 中 字符串含有超链接,如何给超链接自动加上a标签?
1 回答
请问.net 中用jquery传值安全吗?
2 回答
我要回答