我正在使用silverlight并且正在调用一组soap webservice调用,并且在我知道所有操作完成后想要执行操作。
所以,我有3个不同的电话。我在循环中进行10次异步调用并等待它们返回。我如何知道何时完成10个中的一个?自从我使用线程以来已经很长时间了。
答案 0 :(得分:1)
每次通话都会向客户返回一个事件,表明已完成。一个简单而基本的方法是只为每个调用增加一个包变量,然后当你知道所有调用都已完成时,这个值为10。
更强大的机制是在每个请求之前增加调用次数,然后在请求完成时减少它。当计数器返回零时,您知道所有请求都已完成。
需要注意确保对此变量的访问是线程安全的。
答案 1 :(得分:0)
您可以使用BackgroundWorker启动所有Web服务调用并传入WaitHandle等ManualResetEvent并创建其中的数组。然后使用WaitHandle.WaitAll方法。在每次回调中,您将设置WaitHandle。然后在后台工作程序中它将阻塞(因为WaitAll),直到所有等待句柄都被设置。