У меня Есть одна Форма (LoginForm), который имеет Второстепенного Рабочего, Контролирующего базу данных для новых записей.
Затем у меня есть другая Форма (AdminForm), о котором я должен предупредить для обновления его datagrids каждый раз, когда новые данные доступны.
Я мог опросить базу данных в AdminForm также, но полагая, что LoginForm уже делает некоторый опрос, который может быть дорогостоящим, я просто хочу предупредить, чтобы AdminForm обновил DataGridViews с новыми данными.
Можно ли спросить, почему LoginForm делает опрос при показе материала в AdminForm? Ну, LoginForm на самом деле обрабатывает данные и отправляет их по Последовательному порту: $ heheh. Я хочу, чтобы это смогло обработать данные, не входя в систему администратора все время.
У вас может быть фоновый рабочий сигнал о ходе выполнения (для свойства WorkerReportsProgress
установлено значение true, затем вызывается ReportProgress
).
В этом обработчике событий ( OnProgressChanged
) вызвать другое открытое событие, которое вы создаете, которое сигнализирует получателям, что данные должны быть обновлены. Ваша административная форма может подписаться на это событие.
Поскольку я не совсем уверен, вызывается ли событие OnProgressChanged
в контексте основного потока или в контексте потока фонового рабочего, я бы посоветовал вам использовать это. Вызов
при фактическом обновлении пользовательского интерфейса.
РЕДАКТИРОВАТЬ
Используя OnProgressChanged
и другое событие, сделайте следующее:
В классе Form1
объявите новое событие, подобное
public event EventHandler DataChanged;
Также объявите метод вызывающее событие:
protected void OnDataChanged()
{
if (DataChanged != null)
DataChanged(this, EventArgs.Empty);
}
Затем в методе OnProgressChanged
вызовите ваш метод OnDataChanged
.
Все, что вам теперь нужно сделать, это:
form1.DataChanged + = new EventHandler ....
Вы можете, например, передать текущий экземпляр Form1 конструктору Form2 при его создании и присоединить обработчик событий в конструкторе Form2. Есть и другие варианты.
РЕДАКТИРОВАТЬ 2
Подумайте об этом: почему бы вам не поместить код опроса в отдельный класс, который предоставляет событие при изменении данных. Затем вы можете прикрепить к этим событиям как Form1, так и Form2. Это сделает Form2 независимой от Form1.