我從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事件中啓用一個按鈕即可。 –