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 つ以上の行を追加するようなものです。
ありがとう