4

最近、エンティティからデータをロードするためにバックグラウンド ワーカーを使用し始めた後、WPF/Entity Framework 4.0 アプリケーションが不安定になりました。BG ワーカーがデータベースからデータを取得している間、'Please Wait' スピナー グラフィックを実行するためにそうしていましたが、多数の EF 関連の接続の問題やその他の不可解なエラーがランダムに発生するようになりました。Microsoft EF チーム メンバーからの投稿は、EF が「スレッド セーフ」ではないことを示唆しているようで、BG ワーカーを削除すると、問題は実際に解消されました。

これにより、UI エクスペリエンスの問題が残ります。データの読み込み中に、ユーザー フレンドリーな「Please-Wait」スピナーが実行されなくなりました。データロードを BG ワーカーに配置せずにこれを行うことができる他の方法について、誰か提案はありますか?

ありがとう

4

2 に答える 2

5

あなたはその中間の一歩を踏み出すことができます。BackgroundWorkerの代わりに、アプリが閉じるまで実行される単一のスレッドを作成します。そのスレッドは接続を作成し、すべてのデータベース通信を処理します。それにメッセージを投稿し、それが仕事をしてもらい、そして結果を受け取ります。複数のスレッドがEFを同時に使用するのを防ぎながら、UIを解放します。

于 2010-10-04T17:16:44.123 に答える
1

私は以前に BackgroundWorkers を使用したことがあり、バックグラウンドで委任されたタスクを実行し、タスクに関連するイベントを発生させ、終了時に終了することを実際に意図しています。最も一般的な例は、バックグラウンド スレッドから進行状況バーを更新することです。UI 要素は UI スレッドからのみ更新できるため、UI スレッドでイベントを発生させる BackgroundWorker はこの理由で望ましいものです。

データベース接続を介した操作など、永続性を必要とする何かを BackgroundWorker に実行させると、純粋に一時的な性質のために問題が発生するようです。

于 2010-10-04T18:05:27.080 に答える