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