【发布时间】:2010-07-20 02:59:35
【问题描述】:
我有一个 silverlight 4 Web 应用程序,它需要通过访问服务器上的 ASMX Web 服务来与服务器通信。 我有一个列表(是的,数组),我需要(一个一个地)作为参数发送给服务的对象。但是循环遍历列表并运行方法(objecttosend);将无法工作,因为我需要一个接一个地发送,而 Silverlight 似乎只支持异步(大概是不锁定接口 - 有道理)。
所以我尝试了这个:
public void SendNextPart()
{
if (partsToSend.Count > 0)
{
Part thisPart = partsToSend.Dequeue();
fuWS.createPartCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(fuWS_createPartCompleted);
fuWS.createPartAsync(thisPart);
}
}
Queue<Part> partsToSend = new Queue<Part>();
void fuWS_createPartCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
SendNextPart();
}
据我所知,它将检查列表是否有要发送的部分,然后运行 webservice(称为 fuWS)方法并从partsToSend 列表中删除该部分。一旦它获得完成的事件,它应该再次运行 SendNextPart 方法并发送下一部分。
但是发生的事情(通过观看 HTTPwatch 发现)是它发送第一部分,然后一次发送 2 个部分,然后越来越多,一次发送。几乎就像它在实际发送到服务器并成功运行方法之前接收到完成的事件一样。
请帮忙,这让我很烦,它完全破坏了我需要做的事情:'(
【问题讨论】:
-
贴出调用 send next 部分的函数的代码。发布 SendNextBuffer 的代码。
-
嘿抱歉,我编辑了原始部分。谢谢。
标签: c# .net web-services silverlight-4.0 asmx