关于委托回调 实现异步http请求

relive_qiankai 2012-05-29 02:43:26
比如 接口是
public delegate void HttpCallback(object sender, object data);
Class HttpClientRequest
{
public static void RequestA(string id, object sender, HttpCallback callback) { }
public static void RequestB(string id, object sender, HttpCallback callback) { }
public static void RequestC(string id, object sender, HttpCallback callback) { }
}

Class HttpHelper
{
sendRequest()
}

我现在想要RequestA,RequestB,RequestC被统一调用,结果为data
请大神帮下忙
...全文
935 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
__天涯寻梦 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 的回复:]

引用 33 楼 的回复:

引用 30 楼 的回复:
引用 29 楼 的回复:

完全异步就这样:
C# code
public delegate void HttpCallback(object sender, object data);

public void dlgtCallback(object sender,object data)
{
......
}
……
[/Quote]
发吧
relive_qiankai 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 的回复:]

引用 30 楼 的回复:
引用 29 楼 的回复:

完全异步就这样:
C# code
public delegate void HttpCallback(object sender, object data);

public void dlgtCallback(object sender,object data)
{
......
}

public static ……
[/Quote]

我把类文件发给你能帮我看看吗?
__天涯寻梦 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 的回复:]
引用 29 楼 的回复:

完全异步就这样:
C# code
public delegate void HttpCallback(object sender, object data);

public void dlgtCallback(object sender,object data)
{
......
}

public static void RequestA(st……
[/Quote]
回调的意思,RequestA 把该处理的处理完了后,调用 dlgtCallback 这个方法,按我上面所写,在 RequestA 方法内部,执行完了 sendRequest 方法后得到一个 data 结果,callback(sender, data) 把 data 传入,dlgtCallback 的参数 data 就是执行 sendRequest 的结果,余下的就在 dlgtCallback 方法内部处理了。
如果 RequestA 是下载文件,那调用 RequestA 后可以干别的事情,等到下载完了后,dlgtCallback 就被调用,参数 data 就是下载完之后的结果,dlgtCallback 内部就做下载完之后的事情。
relive_qiankai 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 的回复:]

完全异步就这样:
C# code
public delegate void HttpCallback(object sender, object data);

public void dlgtCallback(object sender,object data)
{
......
}

public static void RequestA(string id, object se……
[/Quote]

我觉得这些异步请求的操作应该都是封装好的,只给客户端一个传入url,或者id的一个方法
relive_qiankai 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 的回复:]

完全异步就这样:
C# code
public delegate void HttpCallback(object sender, object data);

public void dlgtCallback(object sender,object data)
{
......
}

public static void RequestA(string id, object se……
[/Quote]
谢谢你的热心,再求大神光临啊
relive_qiankai 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 的回复:]

完全异步就这样:
C# code
public delegate void HttpCallback(object sender, object data);

public void dlgtCallback(object sender,object data)
{
......
}

public static void RequestA(string id, object se……
[/Quote]
好像没回调啊,结果只是返回data给UI那边进行处理,我不懂
__天涯寻梦 2012-05-29
  • 打赏
  • 举报
回复
完全异步就这样:
public delegate void HttpCallback(object sender, object data);

public void dlgtCallback(object sender,object data)
{
......
}

public static void RequestA(string id, object sender, HttpCallback callback)
{
ThreadPool.QueueUserWorkItem(param =>
{
执行 sendRequest() 得到结果,假设为 data
callback(sender, data);
});
}

调用:
HttpCallback callback = dlgtCallback;
RequestA(你的id, 你的sender, callback );
__天涯寻梦 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 的回复:]
引用 24 楼 的回复:

委托需要对应一个和它同参数列表和返回值的方法,RequestA 的参数 HttpCallback callback 就填一个与 HttpCallback 对应的方法名。

看来你快理解我了,能否写出来代码呢 大哥,我是在有点晕了
public delegate void HttpCallback(object sender, object data);

……
[/Quote]
调用的时候:
HttpCallback callback = dlgtCallback;
RequestA(你的id, 你的sender, callback );

就这样。
relive_qiankai 2012-05-29
  • 打赏
  • 举报
回复
有没有人帮忙啊啊啊
relive_qiankai 2012-05-29
  • 打赏
  • 举报
回复
还要实现异步请求操作
relive_qiankai 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 的回复:]

委托需要对应一个和它同参数列表和返回值的方法,RequestA 的参数 HttpCallback callback 就填一个与 HttpCallback 对应的方法名。
[/Quote]
看来你快理解我了,能否写出来代码呢 大哥,我是在有点晕了
public delegate void HttpCallback(object sender, object data);

public void dlgtCallback(object sender,object data)
{

}
public static void RequestA(string id, object sender, HttpCallback callback)
{
//sendRequest()比如所有的请求都用这个方法,是我封装好的
}
然后怎么串联起来实现回调啊,我晕倒了
__天涯寻梦 2012-05-29
  • 打赏
  • 举报
回复
委托需要对应一个和它同参数列表和返回值的方法,RequestA 的参数 HttpCallback callback 就填一个与 HttpCallback 对应的方法名。
relive_qiankai 2012-05-29
  • 打赏
  • 举报
回复
public delegate void HttpCallback(object sender, object data);
public static void RequestA(string id, object sender, HttpCallback callback) { }

方法httpRequest是请求方法

现在就是如何实现上面的回调
relive_qiankai 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 的回复:]

C# code
static void Main(string[] args)
{
//第一个请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.google.com.hk/");

MyResp……
[/Quote]
老大,关于请求部分是已经写好的,现在就是接口这部分 我不会用回调啊,而且必须要按照接口这种方式实现啊
快乐乔巴 2012-05-29
  • 打赏
  • 举报
回复
擦 我写的不对 别参照我的 晕
__天涯寻梦 2012-05-29
  • 打赏
  • 举报
回复
我明白你的意思了
public static void RequestA(string id, object sender, HttpCallback callback) 
{
ThreadPool.QueueUserWorkItem(param =>
{
执行 sendRequest() 得到结果,假设为 data
callback(sender, data);
});
}

调用 RequestA 后方法立即返回不会阻塞,等到 sendRequest 执行完了后调用 HttpCallback 接口将执行结果传入。
快乐乔巴 2012-05-29
  • 打赏
  • 举报
回复
        static void Main(string[] args)
{
//第一个请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.google.com.hk/");

MyResponse(() => { return request.GetResponse(); });

//第二个请求
request = (HttpWebRequest)WebRequest.Create("http://www.yahoo.com/");

MyResponse(() => { return request.GetResponse(); });

Console.ReadLine();
}
//你的共通方法
public static void MyResponse(Func<WebResponse> FunMethod)
{

WebResponse response = FunMethod();
Console.WriteLine(response.ResponseUri.AbsoluteUri);
}


你运行下看看 是不是你想要的结果
擦 难道我写复杂了? 呵呵
relive_qiankai 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

额 客户端啊 我还以为是服务器端呢 那刚才我说的都是服务器端的异步请求 关系不大...
客户端的话我倒不是很熟悉 既然是客户端 楼主的统一调用的意思是不是多个不同请求 最后返回httpResponse处理都调用一个委托方法???
[/Quote]
对,因为我看到请求的格式都一样的,关键里面那层回调返回的处理结果 我都不会如何做,统一调用我更想的晕了
relive_qiankai 2012-05-29
  • 打赏
  • 举报
回复
我把整体过程说下,我写了个http请求类,就是问题中HttpHelper,这个类能实现上传 下载功能(与服务器已连调成功)

客户端怕有堵塞 现在要求用异步请求 需要对HttpHelper进行2次封装,HttpClientRequest这个类就是需要封装异步请求操作的

但是委托回调我不会,不知该如何实现,接口部分是由别人提出的
快乐乔巴 2012-05-29
  • 打赏
  • 举报
回复
额 客户端啊 我还以为是服务器端呢 那刚才我说的都是服务器端的异步请求 关系不大...
客户端的话我倒不是很熟悉 既然是客户端 楼主的统一调用的意思是不是多个不同请求 最后返回httpResponse处理都调用一个委托方法???
加载更多回复(15)

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧