gpt4 book ai didi

c# - 为多个事件显示单个加载屏幕

转载 作者:行者123 更新时间:2023-11-30 17:11:45 25 4
gpt4 key购买 nike

我的应用同时从多个 URL 下载。它们中没有一个是同时完成的,但我只想要一个加载屏幕让用户看到正在发生的事情:-)

我试过一个“票”系统,我有一个列表<>。每个触发下载的事件都会向列表中添加一张票。完成后,他们会移除一个。然后我有一个 BackgroundWorker 每 200 毫秒运行一次来​​检查这个列表。如果列表计数为 0 且加载屏幕 (UserControl) 存在(busyscreen.GetType().Name 与 this.LayoutRoot.Children 中每个对象的比较),它会删除子项。如果列表不为 0 且没有子名称 busyscreen,则会添加它。

这个逻辑有什么问题?我似乎无法让它工作,是否有更好的方法来完成此类工作?

最佳答案

理想情况下,您希望使用阻塞和 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?

这似乎可以完成这项工作。考虑使用它,因为我总是发现理想情况下应该阻塞的代码,当与计时器一起使用时可以工作但更繁琐且容易出现错误

关于c# - 为多个事件显示单个加载屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11192506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com