我的应用程序同时从多个URL下载。它们都不是同时完成的,但是我只想要一个加载屏幕,让用户看到正在发生的事情:-)我尝试了一个“票务”系统,其中有一个List 。每个触发下载的事件都会将票证添加到列表中。完成后,将其删除。然后,我每隔200毫秒运行一次BackgroundWorker来检查此列表。如果列表计数为0并且加载屏幕(UserControl)存在(busyscreen.GetType()。对此this.LayoutRoot.Children中每个对象的名称比较),它将删除该子级。如果列表不是0,并且没有子名称busyscreen,则将其添加。这种逻辑有什么问题?我似乎无法使其工作,是否有更好的方法来进行此类工作? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 理想情况下,您想使用阻塞和类似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上不起作用。这里有替代方法:Alternatives for WaitHandle.WaitAll on Windows Phone?似乎可以完成工作。考虑使用它,因为与计时器一起使用时,我总会发现理想情况下应该阻塞的代码可以工作,但更麻烦并且更容易出现错误 (adsbygoogle = window.adsbygoogle || []).push({});
10-08 06:44