Лучшие практики для BackGroundWorker в WinForms с использованием архитектуры MVP - PullRequest
2 голосов
/ 28 февраля 2010

Я работаю над проектом winforms. Я реализую архитектуру MVP. У меня есть несколько ресурсоемких заданий, выполняющихся на докладчике (чтение из файловой системы и выполнение массовых вставок в БД). Я хотел бы выполнить эти операции в фоновом потоке, не блокируя пользовательский интерфейс и не обновляя элементы управления в моем представлении (индикатор выполнения и представление данных).

Должен ли я просто получить доступ к объекту backgroundworker в моем презентаторе и обработать его события в презентаторе, если обработчики событий просмотра инициируют события, которые слушатель прослушивает ??

Например:

В ПРОСМОТРЕ:

private void backgroundWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
        {
            if (WorkerProgressChange != null)
        {
            WorkerProgressChange(this, EventArgs.Empty);
        }
    }

В докладчике:

_view.WorkerProgressChange += UpdateView;

Это кажется разумным? Может кто-нибудь предложить лучшую модель?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 28 февраля 2010

Работа не должна вызываться докладчиком - добавьте еще один модельный модуль, который выполняет работу, и вызовите работу (может быть через графический интерфейс) из контроллера.

(Представление вызывает событие Work, обрабатываемое контроллером, которое вызывает фонового работника и вызывает представление при обновлении / завершении).

0 голосов
/ 28 февраля 2010

Я думаю, что вид должен быть максимально пассивным. Презентатор должен сам обрабатывать события из BackgroundWorker и транслировать эту информацию в представление (например, обновлять список, показанный в сетке). По мнению, этот запрос не должен отличаться, если бы данные были получены непосредственно от докладчика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...