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