Я использую поток данных TPL в приложении WPF по шаблону MVVM. У меня есть TransformBlock<object,object>
и ActionBlock<object>
, и я связываю их так:
transformBlock.LinkTo(notificationBlock);
ActionBlock<object>
должен обновить индикатор выполнения в моем представлении с текущим прогрессом, но пользовательский интерфейс, кажется, заморожен и обновляется только после того, как все завершит обработку.
Мое свойство CurrentProgress
выглядит так:
private double _CurrentProgress;
public double CurrentProgress
{
get { return _CurrentProgress; }
set
{
_CurrentProgress = value;
RaisePropertyChanged("CurrentProgress");
}
}
и я привязываю его к моему представлению так:
<ProgressBar Value="{Binding CurrentProgress, Mode=OneWay}" Name="uxProgressBar"/>
Я что-то упускаю? почему TPL блокирует поток пользовательского интерфейса?
ИЗМЕНИТЬ
Вот как я создаю экземпляр TPL:
foreach(var myObj in ObjList)
{
transformBlock.Post(myObj);
}
Блок преобразования:
TransformBlock<object, object>(
temp =>
{
var response = ProcessRecord(temp);
return response.Status;
},
new ExecutionDataflowBlockOptions
{
MaxDegreeOfParallelism =20
});
Блок действий:
ActionBlock<object>(
temp =>
{
CurrentProgress = (double)temp.RecordNumber/(double)TotalRecords;
},
new ExecutionDataflowBlockOptions
{
TaskScheduler = TaskScheduler.FromCurrentSynchronizationContext()
});
ОБНОВЛЕНИЕ
Веб-служба, вызываемая в TransformBlock
, была устаревшей (asmx) веб-службой и не называлась Async
. После устранения этой проблемы все остальное работает нормально без использования Dispatcher
или любого другого предлагаемого решения.
Из одного из комментариев к вопросу кажется, что WPF поддерживает публикацию в поток пользовательского интерфейса из другого потока. Однако я не смог найти никакой официальной документации по этому поводу.
TPL?
- person 123 456 789 0   schedule 09.04.2014Wait()
занимаетесьCompletion
блоками или что-то в этом роде? Сколько элементов и сколько времени занимает их обработка? - person svick   schedule 10.04.2014Wait()
нигде больше ничего нет. - person SOfanatic   schedule 10.04.2014System.Windows.Data
ошибок. - person Eli Arbel   schedule 17.04.2014