我从How to wait for a BackgroundWorker to cancel?阅读的答案,但我无法找到一个解决我的具体的问题:如何等待BackgroundWorker完成?
我的应用程序加载大量的数据,但在大多数情况下,这些数据不会被立即要求应用程序启动后。
为了最大限度地减少用户实际请求数据时的延迟,我使用BackgroundWorker加载它,该应用程序在应用程序启动时启动。希望当用户请求数据时,BackgroundWorker已经完成。
然而,在某些情况下,它可能没有。在这些情况下,我想在向用户显示任何内容之前等待加载完成。我可以想到的所有技术都有竞争条件:例如,如果我设置了AutoResetEvent
,当用户请求数据时,我不能使用WaitOne()
,因为AutoResetEvent
可能已经发出信号;如果我添加一个布尔值loading_complete
标志并在调用WaitOne之前检查它,loading_complete
可能会在ckecing之后设置为true,但在WaitOne调用之前将永远不会返回...
任何想法?
编辑:感谢解决方案的@ 500-InternalServerError;使用ManualResetEvent
的作品很棒。感谢其他人的建议。
如果使用.net 4.0或更高版本,可以使用'Task'。 –
@HamletHakobyan不幸的是,我在Windows Phone上SilverLight,它没有'Task' ... –
好吧,只需在RunWorkerCompleted事件中启用一个按钮即可。 –