C#同/异步委托使用和调用,请指教

问题描述

publicdelegatevoidGetResultEventHandler(objectsender,boolIsSucceed,stringDataResults);publiceventGetResultEventHandlerOnGetInfoCompleted;publicvoidGetPostHtmlResults(stringGetURL,intGetTimeOut){HttpWebRequestrequest=HttpWebRequest.CreateHttp(GetURL);request.Method="GET";request.ContinueTimeout=GetTimeOut;request.BeginGetResponse(GetInfoCompleted,request);}privatevoidGetInfoCompleted(IAsyncResultasyncResult){try{HttpWebRequestwebRequest=asyncResult.AsyncStateasHttpWebRequest;HttpWebResponsewebResponse=(HttpWebResponse)webRequest.EndGetResponse(asyncResult);StreamstreamResult=webResponse.GetResponseStream();StreamReaderreader=newStreamReader(streamResult,Encoding.UTF8);if(OnGetInfoCompleted!=null)OnGetInfoCompleted(this,true,reader.ReadToEnd());}catch(WebExceptionex){OnGetInfoCompleted(this,false,ex.Message.ToString());}}请问这个同/异步委托对不对,还有怎样调用它,谢谢!

解决方案

解决方案二:
.NET4.5异步编程强大啊,你可以用HttpClient类。
解决方案三:
用这个publicclassHttpHelper{privatestaticreadonlystringDefaultUserAgent="Mozilla/5.0(Windows;U;WindowsNT5.1;zh-CN;rv:1.8.1.16)Gecko/20080702Firefox/2.0.0.16";///<summary>///创建POST方式的HTTP请求///</summary>///<paramname="url">请求的URL</param>///<paramname="parameters">随同请求POST的参数名称及参数值字典</param>///<paramname="userAgent">请求的客户端浏览器信息,可以为空</param>///<paramname="requestEncoding">发送HTTP请求时所用的编码</param>///<paramname="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>///<returns></returns>publicstaticTask<WebResponse>CreatePostHttpResponse(stringurl,IDictionary<string,string>parameters,stringuserAgent,EncodingrequestEncoding,CookieContainercookieContainer){if(string.IsNullOrEmpty(url)){thrownewArgumentNullException("url");}if(requestEncoding==null){thrownewArgumentNullException("requestEncoding");}HttpWebRequestrequest=WebRequest.Create(url)asHttpWebRequest;request.Method="POST";request.ContentType="application/x-www-form-urlencoded";if(!string.IsNullOrEmpty(userAgent)){request.UserAgent=userAgent;}else{request.UserAgent=DefaultUserAgent;}if(cookieContainer==null){request.CookieContainer=newCookieContainer();}else{request.CookieContainer=cookieContainer;}//如果需要POST数据if(!(parameters==null||parameters.Count==0)){StringBuilderbuffer=newStringBuilder();inti=0;foreach(stringkeyinparameters.Keys){if(i>0){buffer.AppendFormat("&{0}={1}",key,parameters[key]);}else{buffer.AppendFormat("{0}={1}",key,parameters[key]);}i++;}byte[]data=requestEncoding.GetBytes(buffer.ToString());vartask=Task.Factory.FromAsync<Stream>(request.BeginGetRequestStream,request.EndGetRequestStream,request,TaskCreationOptions.None);//等待任务完成task.Wait();//执行完本任务后再连续执行写入留和返回response对象'using(Streamstream=task.Result)//如果上面没有等待任务完成那一句,在这里直接获取结果也是可以的{stream.Write(data,0,data.Length);}}returnTask.Factory.FromAsync<WebResponse>(request.BeginGetResponse,request.EndGetResponse,request,TaskCreationOptions.None);}///<summary>///创建GET方式的HTTP请求///</summary>///<paramname="url">请求的URL</param>///<paramname="timeout">请求的超时时间</param>///<paramname="userAgent">请求的客户端浏览器信息,可以为空</param>///<paramname="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>///<returns></returns>publicstaticTask<WebResponse>CreateGetHttpResponse(stringurl,stringuserAgent,CookieContainercookieContainer){if(string.IsNullOrEmpty(url)){thrownewArgumentNullException("url");}HttpWebRequestrequest=WebRequest.Create(newUri(url))asHttpWebRequest;request.Method="GET";request.UserAgent=DefaultUserAgent;if(!string.IsNullOrEmpty(userAgent)){request.UserAgent=userAgent;}if(cookieContainer==null){request.CookieContainer=newCookieContainer();}else{request.CookieContainer=cookieContainer;}returnTask.Factory.FromAsync<WebResponse>(request.BeginGetResponse,request.EndGetResponse,request,TaskCreationOptions.None);}}

然后结合synchronizationcontext使用就ok了

时间: 2024-09-10 23:31:13

C#同/异步委托使用和调用,请指教的相关文章

c# uwp-C#同/异步委托使用和调用,请指教

问题描述 C#同/异步委托使用和调用,请指教 public delegate void GetResultEventHandler(object sender, bool IsSucceed, string DataResults); public event GetResultEventHandler OnGetInfoCompleted; public void GetPostHtmlResults(string GetURL, int GetTimeOut) { HttpWebReques

多线程,异步委托,同步委托几种方式的区别

Code        public delegate void DoThingsDelegate();        private void Window_Loaded(object sender, RoutedEventArgs e)        {            //通过子线程调用方法  按钮事件可以执行            Thread a = new Thread(new ThreadStart(DoSomeThing));            a.IsBackgrou

wpf c#-有没有办法将异步方法里创建的对象作为数据源关联到控件上...请指教,谢谢

问题描述 有没有办法将异步方法里创建的对象作为数据源关联到控件上...请指教,谢谢 有没有办法将异步方法里创建的对象作为数据源关联到控件上...请指教,谢谢 我将一个异步生成的对象赋给了控件,提示以下异常: "必须在与 DependencyObject 相同的线程上创建 DependencySourc" 根据异常的提示 创建数据源与创建控件不是同一个线程,所以无法作为其数据源,请问有什么方法使得异步里创建的对象能够作为控件的数据源进行绑定.. //异步调用的方法: private vo

技术-JAVAd 大神请指教,小弟这先感谢了

问题描述 JAVAd 大神请指教,小弟这先感谢了 我是JAVA菜鸟,技术是SSH+JSP.目前新进一个公司,用的应该是SpringMVC +ftl模板,他们用的技术不是form表单,据说用的啥配置,比如ftl名字是user_registerftl访问地址是:localhost:8080/test/user!toRegister.action.那么在UserAction里面就有一个方法,返回"register""另外用的是泛型类,比如public class BaseServi

使用poi生成word文档出错是怎么回事呢?各位大神请指教一下

问题描述 使用poi生成word文档出错是怎么回事呢?各位大神请指教一下 The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSS

oracle中如何使用视图,索引,存储过程。 就是说怎么去用或者用在什么地方,请指教

问题描述 oracle中如何使用视图,索引,存储过程. 就是说怎么去用或者用在什么地方,请指教 oracle中如何使用视图,索引,存储过程. 就是说怎么去用或者用在什么地方,请指教 解决方案 具体你去看书,这里只是简单说说:视图,相当于虚拟的表,你可以把不同的表连接起来得到一个视图,直接像表那样返回数据,而不用写复杂的查询了.索引,顾名思义,对表中的数据预处理,加快查询的速度.存储过程,一组预先写好的sql代码的集合,可以直接调用.存储过程因为是事先写好,并且编译的,所以更快,而且它像函数那样,

js 对象引用:请指教对象直接量中引用this的问题

如下代码: (1)   var xx = function() {  this.a = "xx";  this.b = this.a;  }  alert(new xx().b);  (2) var x = function() {  this.a = "x";  this.b = {a:"x.b",b:this.a,c:function(){return this.a;}};  }  var s = new x();  alert(s.b.c(

DISCUZNT 程序做的论坛,现在需要在发帖子的时候,把帖子内容传到别的地方,但是 接受到的内容都显示 问号,也不象是乱码,请指教

问题描述 DISCUZNT程序做的论坛,现在需要在发帖子的时候,把帖子内容传到别的地方,但是接受到的内容都显示问号,也不象是乱码,请指教解决了好久想不明白问题,,也经过编码转换处理,但是怎样都是显示问号,有类似问题的朋友请帮忙 解决方案 解决方案二:我会时时关注...请大家帮帮忙解决方案三:显示成问号一定是编码问题..你发送自己定我的东东来测试你的代码..解决方案四:应该是字符集的问题把你的页面改为gb2312或者utf-8试试解决方案五:编码是UTF-8的,,把他转成任何编码,,结果都是???

书籍-想学好android游戏开发请指教

问题描述 想学好android游戏开发请指教 想学好Andriod游戏开发请指教,书籍,或者一些体会等等,各位大师小弟谢过了 解决方案 建议先决定开发游戏的类型(2D游戏.3D游戏...等等)然后选择开发工具(Unity3D.cocos2d.....)选择工具前看一下该工具要求的编程语言(比如Unity3D为以下任意一种:C#.javascript.boo).选择自己语言比较熟悉的开发工具.接下来就是看一下教程做一下小Demo.其他就是看一下手机游戏开发基础比如手机识图大小.drawCall.F