バックグラウンドワーカーがキャンセルされるのを待つ方法の回答を読みましたか? 、しかし、私は特定の問題の解決策を見つけることができませんでした:
私のアプリは大量のデータをロードする必要がありますが、ほとんどの場合、このデータはアプリの開始直後には必要ありません。
ユーザーが実際にデータを要求したときの遅延を最小限に抑えるために、アプリの起動時に起動する BackgroundWorker を使用してデータを読み込みます。うまくいけば、ユーザーがデータを要求した時点で、BackgroundWorker は完了しています。
ただし、場合によっては、そうでない場合もあります。このような場合、ユーザーに何かを表示する前に、読み込みが完了するのを待ちたいと思います。
私が考えることができるすべての手法には競合状態があります。たとえば、を設定した場合、ユーザーがデータを要求したときにAutoResetEvent
使用できません。ブール値フラグを追加して、 WaitOne を呼び出す前にそれをチェックすると、ckecing の後、WaitOne 呼び出しの前に true に設定される可能性があり、返されません...WaitOne()
AutoResetEvent
loading_complete
loading_complete
何か案が?
編集:解決策については @ 500-InternalServerError に感謝します。ManualResetEvent
素晴らしい作品を使用しています。提案をしてくれた他のみんなに感謝します。