私はWPFアプリケーションをC#で作成しました。ここでmysqlデータベースからデータを取得する必要があります。この1つのODBC 3.51コネクタにデータをロードするとアプリケーションがフリーズします。 私はthread.Butを使ってこの問題を解決しようとしていますが、スレッドを使ってこれを行うことはできません。私の問題を解決する方法を提案してください...wpfフォームがデータベースからデータを取得するとフリーズする
0
A
答えて
2
BackgroundWorkerクラスを使用してください。使い方はとてもシンプルで、データのロードなどのタスクで頻繁に使用されます。次の例はあなたを示し、それは使い方です:
BackgroundWorker bgWorker = new BackgroundWorker() { WorkerReportsProgress=true};
bgWorker.DoWork += (s, e) => {
// Load here your data
// Use bgWorker.ReportProgress(); to report the current progress
};
bgWorker.ProgressChanged+=(s,e)=>{
// Here you will be informed about progress and here it is save to change/show progress.
// You can access from here savely a ProgressBars or another control.
};
bgWorker.RunWorkerCompleted += (s, e) => {
// Here you will be informed if the job is done.
// Use this event to unlock your gui
};
bgWorker.RunWorkerAsync();
のBackgroundWorkerの使用は、UIスレッドは、それが処理ですので、アプリケーションがロード中に応答かかって続けることができます。しかし、このため、ロードされたデータに依存するアクションが発生しないようにする必要もあります。非常に簡単な解決策は、主UI要素のIsEnabled-propertyをfalseに設定し、RunWorkerCompletedでtrueに設定することです。ちょっとした幻想では、あなたはこのダムの動きを(アプリに応じて)素敵なUI体験に改善することができます。
一般的に、別のスレッド(BackgroundWorker)で長時間の操作を行うのは良いアドバイスです。 1つの注意点があります:DoWorkイベントでWPF-Elementsを作成しないでください。これは、派生したすべてのタイプのDependencyObjectを使用されている同じスレッドで作成する必要があるため実行されません。
スレッドやイベントベースの非同期パターンを直接作成するなどの他の解決策がありますが、配管工事のためにHandelを使用するため、BackgroundWorkerを使用することをお勧めします。結局のところ、結果は同じですが、その方法はずっと簡単です。
関連する問題
- 1. アプリインターネットからデータを取得するときにフリーズする
- 2. データベースからデータを取得するCodeIgniter
- 3. フォームが別のデータベースからデータを取得しない
- 4. SQL ServerデータベースからWPFフォームにイメージを取得する方法(LINQ、Databinding、SQL)
- 5. アセットからアクセスするデータベースと取得するデータ
- 6. AzureデータベースからIdentityUserデータを取得するときのエラー
- 7. データベースからデータを取得するときのPHPの問題
- 8. SQLiteデータベースからデータを取得するときにエラーが発生する
- 9. SQLiteデータベースからデータを取得する手助けが必要
- 10. クエリからデータベースからデータを取得
- 11. データベースからデータを取得するときに接続が失われる
- 12. フォームからの入力を変数として使用してMySQLデータベースからデータを取得する
- 13. フォームから取得したデータベースの値をフラッシュする方法
- 14. 異なるテーブルからデータベースにデータを取得する
- 15. ウェブサイトのHTMLフォームからデータを取得
- 16. Jquery - ダイアログウィンドウが開いたときにデータベースからデータを取得する
- 17. データベース列からすべてのデータを取得する
- 18. SQLiteデータベースから読み取ることができません。アクティビティカーソルからデータを取得中にクラッシュする
- 19. iOS5コアデータを取得するとアプリがフリーズする
- 20. ASP.NET:データベースからRadiobuttonlistにデータを取得
- 21. OfbizコールサービスexecuteFind(データベースからデータを取得)
- 22. データベースからデータを取得したい
- 23. Javaのデータベースからデータを取得
- 24. フォーム提出時に別のテーブルからデータを取得する
- 25. MVC3のフォームからデータを取得する
- 26. WCFサービスアプリケーションでフォームからPOSTデータを取得する
- 27. 動的フォームからデータを取得する
- 28. コンボボックスを使用してデータベースからデータを取得する
- 29. データをデータベースから取得するループを使用して
- 30. Webサービスを使用してデータベースからデータを取得する
ありがとうございます。私のアプリケーションにバックグラウンドワーカーを追加しようとしています。 – hmlasnk
@Hemal:この回答が役に立った場合は、投票ボタンの下にあるチェックマークをクリックして、この回答を受け入れられた回答としてマークしてください。 – HCL
このコメントはグレードです。もう一度大変ありがとうございます。 – hmlasnk