2017-03-28 9 views
0

SQL Serverを使用している私のアプリケーションがサーバ上にあります。私の問題は、このアプリケーションを使用しているとき、アプリケーションをフリーズするときにサーバーからデータを取得することです! あなたの提案する解決策は何ですか?スレッドが取得するとき、それはデータが背中合わせメイン/ UIスレッド上で呼び出しだ、フリーズアプリケーションがオンラインSQLサーバからデータを取得する

がスレッド上でクエリを実行します(現代の場合は、タスクを使用):詳細情報なし

+0

コードを少し用意するだけで解決策を推測することはできません。また、何か試しましたか?あなたが間違っていた場所を確認するためのテストはほとんどありません。 – Nicolas

答えて

0

は、ここに一般的なアドバイスです。これにより、データのクエリ中にUIがロックされなくなります。

UIスレッドで「スピナー」または「読み込み」インジケータを開始して、ユーザーがクリックするのを知っているため、データを何度も繰り返し読み込まないようにすることもできます。 ..

また、クエリスレッドに何らかのエラー処理を含めるようにしてください。状況が悪くなった場合は、復旧して警告することができます(メッセージボックス、ログに書き込んだり、何でもする必要があります)。

1

あなたはUIスレッドからデータベースクエリを実行しているようです。おそらく、クエリはボタン「クリック」アクションハンドラで実行されていますか?

UIスレッドは、UIメッセージループが実行され、UIイベント(ボタンクリック、ウィンドウサイズ変更など)を処理するスレッドです。 UIスレッドで長時間実行されるタスクを実行すると、タスクが終了するまで他のすべてのUIメッセージが処理されなくなります。その結果、UIはフリーズして見えます。

データベースコールはかなり遅く、UIスレッド外で実行することをお勧めします。 1つの解決策は、新しいスレッドを回転させ、クエリの実行が完了したらコールバックメソッドを呼び出すことです。

より良いアプローチは、async/awaitを使用することです。 DBコールを実行する非同期メソッドを定義する必要があります。そして、あなたのUIスレッドでそのメソッドを待っています。

データベースからデータを取得する方法を表示し、UIをブロックせずにデータを実装する方法を詳しく説明します。

関連する問題