Silverlight里主线程异步Http请求后等待返回结果

Silverlight里,在主线程里,对远程的Http发请求,我使用HttpWebRequest类。这个类里没有.net3.5里的同步方法request.GetRespo... Silverlight里,在主线程里,对远程的Http发请求,我使用HttpWebRequest类。这个类里没有. net 3.5里的同步方法
request.GetResponse而只有一个异步的方法request.BeginGetResponse和request.EndGetResponse。我的代码如下:
HttpWebRequest request= WebClient.Create(Uri);
IAsyResult asy = request.BeginGetResponse(CallbackHandle,request);
//下面的操作依赖于异步操作返回的结果

private void CallbackHandle(IAsyResult asy)
{
HttpWebRequest request = asy.State as HttpWebRequest;
HttpWebResponse response = request.EndGetResponse();
......
}
手工打的,可能有写错误,大概的思路应该表达清楚了。
这里我在调用request.BeginGetResponse后希望主线程能等待异步调用的结果后再往下走。不知道该怎么做。
我也用了IAsyResult.AsyWaithandle.WaitOne()但调用这个方法后,貌似就不会执行回调的函数CallbackHandle了。
跪求解决的方法,在线等,希望能详细解释,最好有代码。
谢谢
展开
 我来答
miniappe8t3L68TSCbzK
2009-11-24 · TA获得超过556个赞
知道小有建树答主
回答量:384
采纳率:0%
帮助的人:217万
展开全部
.Net中使用类库提供的 BeginXXX() 这种异步回调时,有几种方式可以猛咐选择实现线程同步:

1,异步回调后,调用 EndXXX()阻塞主线程,等待异竖槐步线程返回。

2,异步回调后,调用ar.AsyncWaitHandle.WaitOne(),阻塞主线程,等待异步线程返回,这种方式实际使用了一个信号量 AutoResetEvent 来同步线程的 , 这时候可以设置一个等待超时时间,不会像1那样一直傻等。

3,异步回调后,轮询 ar.IsCompleted ,直到 = true,主线程再继续处理下去。这种方式可以让主线程做其他的工作,枝纤纯由于要不停的查子线程状态,所以也比较占CPU时间。

4,异步回调后,调用自定义的回调函数进行处理,主线程不阻塞。这就是你用的这个方法。这也是最常用的方式,主线程可以继续响应UI.

你给的代码没问题,你可以在private void CallbackHandle(IAsyResult asy)中下断点看有没有执行。

如果没有进入这个回调函数的话,有可能是你的托管线程池 ThreadPool 满了,暂时没有可用的工作线程了。

如果进入了,在HttpWebResponse response = request.EndGetResponse(); 停下,那就是远程的URL无响应。你可以设置HttpWebRequest 的请求超时。
重典技术闲话
2009-12-08 · TA获得超过2173个赞
知道大有可为答主
回答量:2593
采纳率:0%
帮助的人:1151万
展开全部
如果乱运使用异步的话,同步比较费事
request.GetResponse(CallbackHandle,request);
不如考虑哗悔梁直接执行而不前则使用异步
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lzwei_ac
2009-11-23
知道答主
回答量:20
采纳率:0%
帮助的人:13.6万
展开全部
你的意思是用异步的方式实现同步吧。我没用过Silverlight, 只能码氏提供租模裂弊闭一点思路,希望有所帮助:
调用request.BeginGetResponse的线程在注册一个CallbackHandle(该回调函数向一个mailbox mbox_a发送一个消息),然后wait在mailbox mbox_a上面直到回调函数被调用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式