我正在开发一个使用 SQL Compact 作为主数据库的 WinForms 应用程序。有人告诉我我永远不会弄乱 UI 线程,每个操作都需要在 UI 线程之外完成。通过这个演讲为每个 CRUD 操作创建一个线程并出现一个进度条,但我认为这可能不是最好的方法,我很不确定何时何地使用线程以及数据库操作。我没有使用 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 行一样。
谢谢