Доступ к данным NHibernate без зависания GUI - PullRequest
2 голосов
/ 24 января 2012

Я работаю с приложением Windows Forms, которое использует NHibernate в качестве ORM. Наш обычный шаблон выглядит примерно так:

  1. Получить граф объектов из базы данных и заполнить GUI
  2. Позволяет пользователю редактировать данные в графическом интерфейсе
  3. Сохранить граф объектов в базе данных

Это понятие единицы работы требует, чтобы сеанс NHibernate продолжался столько времени, сколько требуется пользователю для редактирования данных и нажатия кнопки Сохранить. Следовательно, наш сеанс создается как часть шага 1 и располагается как часть шага 3.

Теперь я хочу отображать неопределенную анимацию индикатора выполнения во время операции сохранения. Следовательно, сеанс не может жить в потоке GUI, так как это приведет к зависанию анимации, если сохранение займет время.

Как мне лучше всего решить эту проблему?

1 Ответ

4 голосов
/ 24 января 2012

Самое простое решение - выделить фонового рабочего:

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...