Новое в MVVM - Лучшие практики для разделения потока обработки данных и потока пользовательского интерфейса? - PullRequest
0 голосов
/ 29 марта 2010

Я начал возиться с шаблоном MVVP, и у меня возникли некоторые проблемы с отзывчивостью пользовательского интерфейса в сравнении с обработкой данных.

У меня есть программа, которая отслеживает пакеты. Объекты отгрузки и упаковки сохраняются в базе данных SQL и отображаются в представлении WPF. После первоначального извлечения записей возникает заметная пауза перед отображением представления новых отправлений, и я даже не реализовал код, который подсчитывает отправления, которые просрочены / активны (что потребует проверки отслеживания через веб-сервис, и много времени).

Я построил это с помощью среды Ocean, и все, кажется, идет хорошо, кроме случаев, когда я впервые начал свой набег в многопоточность. Он сломался, и в океане что-то сломалось ... Вот что я сделал:

Private QueryThread As New System.Threading.Thread(AddressOf GetShipments)


Public Sub New()
    ' Insert code required on object creation below this point.

    Me.New(ViewManagerService.CreateInstance, ViewModelUIService.CreateInstance)
    'Perform initial query of shipments
    'QueryThread.Start()
    GetShipments()
    Console.WriteLine(Me.Shipments.Count)
End Sub



Public Sub New(ByVal objIViewManagerService As IViewManagerService, ByVal objIViewModelUIService As IViewModelUIService)
    MyBase.New(objIViewModelUIService)
End Sub



Public Sub GetShipments()
    Dim InitialResults = From shipment In db.Shipment.Include("Packages") _
                         Select shipment
    Me.Shipments = New ShipmentsCollection(InitialResults, db)
End Sub

Итак, я объявил новый поток, назначил ему метод GetShipments и создал его в конструкторе по умолчанию. Океан сходит с ума от этого, поэтому должен быть лучший способ сделать это.

У меня не было возможности выяснить использование SQL ORM в Ocean, поэтому я использую Entity Framework (возможно, на днях я посмотрю на NHibernate или еще что-нибудь).

Я просмотрел несколько статей, и у всех них есть примеры простого использования. Некоторые упомянули об Диспетчере, но ни один из них не слишком углубился в то, как он используется.

1 Ответ

1 голос
/ 25 мая 2010

То, как я это делаю, - это использование фонового работника. Затем я использую MVVM Light для отправки сообщения главному интерфейсу для обновления прогресса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...