您好,欢迎来到[问答大全]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 问答大全 >> 电脑网络 >> 关于异步委托使用和调用

关于异步委托使用和调用

来源:网络整理     时间:2016/4/5 16:49:06     关键词:关于,使用

关于网友提出的“关于异步委托使用和调用”问题疑问,本网通过在网上对“关于异步委托使用和调用”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题:关于异步委托使用和调用
描述:

public delegate void GetResultEventHandler(object sender, bool IsSucceed, string DataResults);
public event GetResultEventHandler OnGetInfoCompleted;

public void GetPostHtmlResults(string GetURL, int GetTimeOut)
{
HttpWebRequest request = HttpWebRequest.CreateHttp(GetURL);
request.Method = "GET";
request.ContinueTimeout = GetTimeOut;
request.BeginGetResponse(GetInfoCompleted, request);
}

private void GetInfoCompleted(IAsyncResult asyncResult)
{
try
{
HttpWebRequest webRequest = asyncResult.AsyncState as HttpWebRequest;
HttpWebResponse webResponse = (HttpWebResponse)webRequest.EndGetResponse(asyncResult);
Stream streamResult = webResponse.GetResponseStream();
StreamReader reader = new StreamReader(streamResult, Encoding.UTF8);
if (OnGetInfoCompleted != null)
OnGetInfoCompleted(this, true, reader.ReadToEnd());
}
catch (WebException ex)
{
OnGetInfoCompleted(this, false, ex.Message.ToString());
}
}

请问这个异步委托对不对,还有怎样调用它,谢谢!


解决方案1:

定义的地方就不说了

你已经定义了 

调用的地方也不用说了 你也已经调用了 不过不和规范 一般来说 

事件叫做 GetInfoCompleted 调用的方法就应该叫做 OnGetInfoCompleted

不过也无所谓了 

你这句话就是调用  

if (OnGetInfoCompleted != null)
OnGetInfoCompleted(this, true, reader.ReadToEnd());
}

意思就是 执行GetInfoCompleted 会调用 事件 OnGetInfoCompleted

你这段代码 唯一没有写的位置是 执行部分

执行部分分这么写 

假如你这个类叫做 MyClass 事件叫做 OnGetInfoCompleted(保证和你的事件名一样)

而执行部分需要插入的方法叫做 myfunction

那么代码这么写

MyClass myClass = new MyClass();

myClass.OnGetInfoCompleted+=myfunction

myClass.GetInfoCompleted()// 执行这个的时候 会调用 myfunction

 这里有一点要提的是 这里你的调用方法是同步的 

异步需要用invoke 

解决方案2:

这是个事件,写的是对的。先实例化这个类得到实例a,然后a.OnGetInfoCompleted+=……

设置事件,这样当你调用a.GetPostHtmlResults方法时,执行完相关操作就会转到你注入的监听方法中执行。


以上介绍了“关于异步委托使用和调用”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/wd/570460.html

相关图片

相关文章