理想情况下,您想使用阻塞和 WaitHandle 之类的东西 - 您可以让您的代码阻塞,直到有信号继续
http://msdn.microsoft.com/en-us/library/system.threading.waithandle.aspx
基本上,您创建一个 ManualResetEvent 对象数组 - 这些对象将在工作完成时向主线程发出信号
然后你打电话
WaitHandle.WaitAll(arrayOfManualResetEvents)
这将阻塞,直到发出复位事件的信号
ManualResetEvent.Set()
所以在伪代码中:
> Create each URL loader
> Create a ManualResetEvent for each loader
> Start each loader loading
> Call WaitHandle.WaitAll(arrayOfManualResets) which will block on your main thread
> In each URL LoadComplete handler call the associated ManualResetEvent.Set()
> The main thread will continue when all are signalled
编辑:正如已经指出的那样 - WaitHandle.WaitAll 在 Windows Phone 上不起作用。这里有一个替代方案:
Windows Phone 上 WaitHandle.WaitAll 的替代方案?
这似乎可以完成这项工作。考虑使用它,因为我总是发现理想情况下应该阻塞的代码在与计时器一起使用时可以工作,但更繁琐且容易出现错误