Обновление DataGridView от другого использования Формы BackGroundWorker

У меня Есть одна Форма (LoginForm), который имеет Второстепенного Рабочего, Контролирующего базу данных для новых записей.

Затем у меня есть другая Форма (AdminForm), о котором я должен предупредить для обновления его datagrids каждый раз, когда новые данные доступны.

Я мог опросить базу данных в AdminForm также, но полагая, что LoginForm уже делает некоторый опрос, который может быть дорогостоящим, я просто хочу предупредить, чтобы AdminForm обновил DataGridViews с новыми данными.

Можно ли спросить, почему LoginForm делает опрос при показе материала в AdminForm? Ну, LoginForm на самом деле обрабатывает данные и отправляет их по Последовательному порту: $ heheh. Я хочу, чтобы это смогло обработать данные, не входя в систему администратора все время.

1
задан Gabe 2 May 2011 в 05:46
поделиться

1 ответ

У вас может быть фоновый рабочий сигнал о ходе выполнения (для свойства WorkerReportsProgress установлено значение true, затем вызывается ReportProgress ).

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

Поскольку я не совсем уверен, вызывается ли событие OnProgressChanged в контексте основного потока или в контексте потока фонового рабочего, я бы посоветовал вам использовать это. Вызов при фактическом обновлении пользовательского интерфейса.

РЕДАКТИРОВАТЬ
Используя OnProgressChanged и другое событие, сделайте следующее:

В классе Form1 объявите новое событие, подобное

public event EventHandler DataChanged;

Также объявите метод вызывающее событие:

protected void OnDataChanged()
{
    if (DataChanged != null)
        DataChanged(this, EventArgs.Empty);
}

Затем в методе OnProgressChanged вызовите ваш метод OnDataChanged .

Все, что вам теперь нужно сделать, это:

  1. Присоединить Form2 к событию в Form1, используя что-то вроде form1.DataChanged + = new EventHandler ....
  2. В этом обработчике событий обновите элементы управления в Form2

Вы можете, например, передать текущий экземпляр Form1 конструктору Form2 при его создании и присоединить обработчик событий в конструкторе Form2. Есть и другие варианты.

РЕДАКТИРОВАТЬ 2
Подумайте об этом: почему бы вам не поместить код опроса в отдельный класс, который предоставляет событие при изменении данных. Затем вы можете прикрепить к этим событиям как Form1, так и Form2. Это сделает Form2 независимой от Form1.

2
ответ дан 3 September 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: