Сообщать Window, что в классе-сервисе были выполнены действия
Есть класс, Например WorkService. Есть окно WorkWindow с гридом Work-ов
В WorkService есть метод ProcessingWork, который вызывается извне принимает параметры, валидирует их и записывает новый Work в базу данных.
Встал вопрос - как дополнить метод ProcessingWork или доработать WorkService и WorkWindow, чтобы после записи методом ProcessingWork Work-а в базу данных, сообщать об этом Workwindow. Окно, в свою очередь, будет обновлять грид с ворками и показывать, что появился новый ворк.
Ответы (1 шт):
Как вариант реализовать это через событие. Если планируется закрывать окно, но не завершать работу программы. Необходимо при закрытии окна отписаться от события, иначе GC не сможет утилизировать объект вашей формы. _workService.ProcessingWorkAdded -= _processingWorkAdded;
class WorkService
{
public event EventHandler ProcessingWorkAdded;
public void ProcessingWork()
{
//Некий код работы
ProcessingWorkAdded?.Invoke(this, EventArgs.Empty);
}
}
class WorkWindow
{
private readonly WorkService _workService;
public WorkWindow(WorkService workService)
{
_workService = workService;
_workService.ProcessingWorkAdded += _processingWorkAdded;
Closed += _windowClosed;
}
private void _processingWorkAdded(object sender, EventArgs e)
{
//Обновление грида
}
private void _windowClosed(object sender, EventArgs e)
{
_workService.ProcessingWorkAdded -= _processingWorkAdded;
}
}