Я начал возиться с шаблоном 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 или еще что-нибудь).
Я просмотрел несколько статей, и у всех них есть примеры простого использования. Некоторые упомянули об Диспетчере, но ни один из них не слишком углубился в то, как он используется.