正如标题所暗示的那样,我发现自己在这种情况下相当多,并且相信我做错了什么。我经常想要一个根据后台任务的工作不断更新的 UI,但发现简单地尝试更新 UI 和在 UI 线程上工作之间的分离可能很难找到。
假设我有一个简单的 DependencyObject:
public class TaskItem : DependencyObject
{
public string Name {get;set;}
public string Command {get;set;}
public WorkState State
{
get { return (WorkState)GetValue(StateProperty); }
set { SetValue(StateProperty, value); }
}
public static readonly DependencyProperty StateProperty =
DependencyProperty.Register("State", typeof(WorkState),
typeof(TaskItem));
}
这些对象存储在称为 mTaskItems 的 ObservableCollection 中。在一些用户事件上,我想对这些对象做一些工作:
Task.Run(new Action( () =>
{
foreach (TaskItem task_item in mTaskItems.Where(n => n.State !=
WorkState.Executing))
{
DoSomeWork(task_item);
}
}));
我无法检查上述示例中 TaskItem 的 DependencyProperty 状态,因为它现在位于拥有它的不同线程上。
如果您想在处理过程中更新 UI,或者我是否以完全错误的方式处理这个问题,那么在整个业务逻辑中散布调度程序是否正常?
我的依赖对象是否应该根本不用作业务数据容器,而只是作为 UI 数据容器存在?(如果是这样,链接它们的最佳设计是什么?)
谢谢。