Как сделать некоторую задачу пользовательского интерфейса асинхронным - PullRequest
0 голосов
/ 19 февраля 2012

У меня есть задача пользовательского интерфейса, которая заняла много времени.У меня есть некоторая «домашняя» сетка свойств (я использую ItemControl, где шаблон элемента использует ContentControl, сам элемент содержит таблицу данных для использования в элементе управления Content.).

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

Процесс обновления занимает около 1-2 секунд.пока это обновление приложения зависает.

Есть ли способ обновить сетку свойств в фоновом режиме?Есть ли способ остановить последнее обновление?

С уважением, Леон

Ответы [ 2 ]

0 голосов
/ 19 февраля 2012

Вам следует внедрить шаблон MVVM, чтобы убедиться, что элементы управления вашего пользовательского интерфейса - это способ отображать ваши данные, а не УДЕРЖАТЬ данные.

После этого вы можете выбирать различные фоновые задачи и обновлять только ВМсодержание, когда готово.

Проверьте это видео:

http://blog.lab49.com/archives/2650

0 голосов
/ 19 февраля 2012

вам нужно работать с потоком и диспетчером, чтобы сделать это.

Диспетчер в WPF / SL - http://www.switchonthecode.com/tutorials/working-with-the-wpf-dispatcher

Для использования другого потока у вас есть несколько вариантов:

  1. Пул потоков (только для TaskClass в .Net 4)- http://msdn.microsoft.com/en-us/library/3dasc8as(v=vs.80).aspx
  2. Класс потока - http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx
  3. Класс BackgroundWorker - http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx

Третий вариант самый простой, если вы не знаете, какдля работы с потоками.

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

...