我已阅读如何等待 BackgroundWorker 取消的答案?,但我找不到解决我的具体问题的方法:
我的应用程序必须加载大量数据,但在大多数情况下,应用程序启动后不会立即需要这些数据。
为了最大限度地减少用户实际请求数据时的延迟,我使用 BackgroundWorker 加载它,它在应用程序启动时启动。希望当用户请求数据时,BackgroundWorker 已经完成。
但是,在某些情况下,它可能没有。在这些情况下,我想等待加载完成,然后再向用户显示任何内容。
我能想到的所有技术都有竞争条件:例如,如果我设置了一个AutoResetEvent
,当用户请求数据时我不能使用WaitOne()
,因为AutoResetEvent
可能已经发出信号;如果我添加一个布尔loading_complete
标志并在调用 WaitOne 之前检查它,loading_complete
可能会在 ckecing 之后设置为 true,但在 WaitOne 调用之前,它永远不会返回......
任何想法?
编辑:感谢@500-InternalServerError 的解决方案;使用ManualResetEvent
效果很好。感谢其他所有人的建议。