我正在使用一个使用NHibernate作为ORM的Windows窗体应用程序。我们通常的模式看起来像:
这个工作单元的概念要求NHibernate会话只要用户编辑数据并点击“保存”按钮就可以生存。因此,我们的会话将作为步骤1的一部分进行实例化,并作为步骤3的一部分进行处理。
现在,我想在保存操作期间显示不确定的进度条动画。因此,会话无法在GUI线程上生效,因为如果保存需要时间,则会导致动画冻结。
我怎样才能最好地解决这个问题?
答案 0 :(得分:4)
最简单的解决方案是剥离后台工作人员:
BackgroundWorker _worker;
void OnSaveButtonClicked(...)
{
// Update your entities with the data entered by the user, e.g.:
_settings.UserName = textBoxUserName.Text
_worker = new BackgroundWorker();
_worker.WorkerCompleted += (s, e) => { /* Saving completed,
hide progress bar */ };
_worker.DoWork += (s, e) =>
{
_session.SaveOrUpdate(_settings);
};
// Show progress bar:
// progressBar.Show...
_worker.RunWorkerAsync();
}