Где реализовать BackgroundWorker.Winforms c # - PullRequest
1 голос
/ 10 ноября 2010

Я создал UserControl, используя DevExpress XtraTreeList. В основном в этом пользовательском контроле я использую предметы инвентаря. которых более 30000. Теперь, когда я загружаю полную таблицу в набранный DataSet, это занимает почти 6-8 секунд.

Целью создания пользовательского контроля является возможность повторного использования. Так что мы можем использовать его в других частях приложения.

Теперь я использую этот UserControl в Winform, где этот usercontrol находится в левой части формы, где он будет использоваться в качестве меню. Предполагается, что пользователь щелкает по своему желаемому элементу, расширяя узлы, и когда узлы выбираются, а затем его дополнительные подробности будут извлечены и будут отображаться в поле from. Пока все хорошо.

Теперь проблема в том, что в той же форме наряду с другими элементами управления у нас есть Devexpress XtraButtonEdit (сборка с использованием текстового поля и кнопки справа). Этот buttonEdit отображает текущий выбранный код Item (из treeMenu UserControl) в своем текстовом поле, когда мы нажимаем кнопку buttonEdit, затем загружаем другую форму в качестве модели и отображаем тот же UserControl (XTRATreeList из DevEpress). Единственная проблема заключается в том, что, когда я загружаю эту новую форму в качестве модели. Дерево снова загружается, что выглядит немного неловко.

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

Если я реализую этот фоновый режим в UserControl, то как мне получить доступ к этому потоку BackgroundWorker и выполнить его в главной форме, где я использую UserControl с левой стороны в качестве меню. На самом деле то, что я хочу, это когда пользователь нажимает элемент управления ButtonEdit и форма загружается, она должна загружаться как флэш-память или максимум через 2 секунды .... пожалуйста, помогите .... и выполните ее.

Я надеюсь, что госзакупки поймут мою проблему.

Если кто-то обнаружит какие-либо трудности, пожалуйста, дайте мне знать ...

С уважением,

Ответы [ 2 ]

2 голосов
/ 10 ноября 2010

Вам не нужно «обращаться к этому потоку BackgroundWorker и выполнять его в главной форме».

Пользовательский элемент управления может содержать собственный Bgw.Вам нужен синхронный метод (в UC) для его запуска.Затем обработайте завершенные (и, возможно, прогресс) события внутри вашего UC.

Но данные не будут загружаться быстрее, вы только разморозите свой основной графический интерфейс.

1 голос
/ 10 ноября 2010

Если задержка вызвана в коде, который загружает дерево, то вам следует «поточить» эту часть. Я бы порекомендовал прочитать этот пример главы из C # в двух словах: http://www.albahari.com/threading/. Они охватывают C # 4.0, но вы сможете применить большинство концепций к C # 3.0, если это то, что вы используете.

...