2

SQL Compact をメイン データベースとして使用して WinForms アプリケーションを開発しています。私は決してUIスレッドを台無しにしないと言われました.すべての操作はUIスレッドの外で行う必要があります..スレッドを作成し、進行状況バーが表示されるすべてのCRUD操作についてこのスピーチを実行しますが、これはそうではないかもしれませんこれを行う最善の方法であり、データベース操作と一緒にスレッドをいつどこで使用するかについてはよくわかりません。これらの DB 呼び出しを行うために UI スレッドを使用していませんが、使用しても問題はありません。ユーザーに情報を表示するには、必要に応じて呼び出しを行います (グリッドまたはコンボボックスにデータを表示するため)。ここに小さなコードがあります:

this.SuspendLayout();

                ProgressDialog progressDialog = new ProgressDialog();


                Thread backgroundThread = new Thread(
                    new ThreadStart(() =>
                    {
                        var unitOfWork = new DAL.Implementations.Entity_Framework.UnitOfWork<dbgmEntities>();
                        var espacosRepository = unitOfWork.GetRepository<DAL.Espacos>();
                        Espacos espaco;

                        if (e.Row.Cells["ESP_Descr"].Value != null)
                            espaco = new Espacos { ESP_Nome = e.Row.Cells["ESP_Nome"].Value.ToString(), ESP_Descr = e.Row.Cells["ESP_Descr"].Value.ToString() };

                        else
                            espaco = new Espacos { ESP_Nome = e.Row.Cells["ESP_Nome"].Value.ToString() };


                        espacosRepository.AddOrAttach(espaco);
                        unitOfWork.Save();

                    }
              ));


                backgroundThread.Start();
                progressDialog.Show();
                progressDialog.Close();
                this.ResumeLayout();

ご覧のとおり、SQL Compact と Entity Framework 4.0 でリポジトリ パターンを使用しています。重い操作の場合にユーザー インターフェイスをブロックする UI スレッドではなく、スレッド内でデータベース操作を行っていることがわかります。問題は次のとおりです。

UI スレッドの外部のスレッドからデータベース呼び出しを行う必要があるのか​​、それとも負荷の高い操作なのか? 異なるテーブルに 1 つまたは 2 つ以上の行を追加するようなものです。

ありがとう

4

2 に答える 2

0

Dan が言ったように、UI スレッド単純に表示とユーザー入力の取得に使用する必要があります。

ただし、私たちが行う操作の大部分は非常に高速です。別のスレッドをスピンアップすると、単に操作自体を実行するよりも多くの時間コストが追加されます。私の提案は、処理に数秒以上かかるものに対してのみ新しいスレッドを起動することです。

于 2013-05-08T22:51:46.703 に答える