В настоящее время я разрабатываю/перерабатываю часть привязки данных приложения, которая сильно использует привязку и обновления winforms, исходящие из фонового потока (один раз в секунду нa > 100 записей).
Предположим, что приложение является торговым приложением, где фоновый поток отслеживает изменения данных и помещает их в объекты данных. Эти объекты хранятся в BindingList<>
и реализуют INotifyPropertyChanged
для распространения изменений посредством привязки данных к элементам winforms.
Кроме того, объекты данных в настоящее время сортируют изменения через WinformsSynchronizationContext.Send
в поток пользовательского интерфейса.
Пользователь может ввести некоторые из значений в пользовательском интерфейсе, что означает, что некоторые значения могут быть изменены с обеих сторон. И значения пользователя не должны быть перезаписаны обновлениями.
Итак, у меня возникает вопрос:
- Есть ли общий дизайн-гильдия, как это сделать (обновления фона в привязке данных)?
- Когда и как маршалировать поток пользовательского интерфейса?
- Каков наилучший способ взаимодействия фонового потока с объекты привязки/данных?
- Какие классы/интерфейсы должны использоваться? (BindingSource,...)
- ...
Пользовательский интерфейс действительно не знает, что существует фоновый поток, который обновляет элемент управления, и, насколько я понимаю, в сценариях привязки данных пользовательский интерфейс не должен знать, откуда поступают данные... Вы можете думать о фоновый поток как что-то, что подталкивает данные к пользовательскому интерфейсу, поэтому я не уверен, что фоновая работа - это вариант, который я ищу.
Иногда вы хотите получить некоторый ответ UI во время операции в объекте data/business (например, задание фона во время пересчетов). Повысить свойство, измененное на свойство состояния, связанное с фоном, недостаточно, так как элемент управления перерисовывается после завершения вычисления? Моя идея - захватить событие propertychanged и вызвать .update() в элементе управления... Любые другие идеи об этом?