Man*_*ani 4 .net data-binding wpf multithreading
如果从工作线程(非UI)更新属性值,它是否会反映在使用数据绑定和侦听属性更改的控件中?
谢谢你的关注.
WPF正在使用Dispatcher,因此一切都在一个UI线程上运行,但是具有交换机类型并发性.当你更新一些依赖对象的prop时,它实际上将一个新的作业发布到调度程序队列上.当该作业运行时,它将在UI线程上运行并正确更新控件.但是,如果您尝试直接从后台线程访问控件,您将获得异常.
由于这种实现,存在某些边缘情况.例如,即使您更新UI线程上的prop,您也不能指望控件将自动同步更新它以反映您的更改.所以,如果你有像这样的xaml:
<TextBox x:name="tb" Text="{Binding Text"}/>
Run Code Online (Sandbox Code Playgroud)
像这样的代码:
var model = new { Text = "aaa" };
tb.DataContext = model;
model.Text = "bbb";
Debug.Assert(tb.Text == "bbb");
Run Code Online (Sandbox Code Playgroud)
断言可能会失败,因为更新可能会在下一个任务中通过调度程序进行.并且在当前呼叫结束并且控制权返回给调度员之前不会更新.
归档时间: |
|
查看次数: |
1343 次 |
最近记录: |