У меня есть сценарий, в котором у меня есть коллекция объектов, привязанных к сетке данных в winforms. Если пользователь перетаскивает элемент в сетку, мне нужно добавить строку-заполнитель в сетку и начать длительный процесс асинхронного импорта. Мне нужно сообщить о состоянии процесса асинхронного импорта обратно в пользовательский интерфейс, обновив строку в сетке и оставив пользовательский интерфейс реагировать, чтобы позволить пользователю редактировать другие строки.
Какая лучшая практика для этого?
Мое текущее решение: связывание поточно-ориентированной реализации BindingList с сеткой, заполненной объектами, которые отображаются в виде строк в сетке. Когда пользователь перетаскивает элемент в сетку, я создаю новый объект, содержащий разреженную информацию, полученную из отброшенного элемента, и добавляю его в BindingList, отключая редактирование этой строки. Затем я запускаю отдельный поток, чтобы выполнить импорт, передавая ему только что связанный объект, который я только что создал, для заполнения данными. Процесс импорта периодически устанавливает состояние объекта и запускает событие, на которое подписывается пользовательский интерфейс, сообщая ему обновить сетку, чтобы увидеть новые свойства объекта.
Должен ли я передавать тот же объект, который привязан к сетке, в поток процесса импорта для работы, или я должен создать копию и объединить изменения объекта в потоке пользовательского интерфейса с помощью BeginInvoke?
Есть проблемы или советы по поводу этой реализации?
Спасибо