c# - 为什么从 UI 线程调用的 ConfigureAwait(false) 对 UI 更新的 XAML 绑定属性起作用?
问题描述
在我后面的代码中,我有一个按钮单击事件处理程序来执行一些ConfigureAwait(false)
以 Task 为后缀的 IO 工作。
现在我希望当async
任务完成时,它不会在 UI 线程上恢复。因此,TxtStatus.Text
分配预计会失败,而且确实如此。
问题是,如果这个 TextBox 是使用实现的模型绑定的,INotifyPropertyChanged
那么它可以工作并且 UI 会更新。
为什么这可能,UI更新不应该失败吗?
以下代码片段是我当前的代码,其中包含足够的详细信息来确定我的问题的上下文。
看法
<TextBox Name="TxtStatus" Text="{Binding Model.Status, Mode=TwoWay}/>
View 的 CodeBehind
private async void Button_Click(object sender, RoutedEventArgs e)
{
await _viewModel.DoWorkAsync().ConfigureAwait(false);
//TxtStatus.Text = "This does not work.";
_viewModel.Model.Status= "This works.";
}
模型
public class MyModel : INotifyPropertyChanged
{
private string _status;
public string Status
{
get => _status;
set
{
_status= value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
解决方案
推荐阅读
- wordpress - 在 WooCommerce 中批量更改运输类别
- angular - 将组件添加到角度 11 时出现 InvalidInputOptions 错误
- html - 带有columns-*的css flex项目拉伸太多
- mysql - 创建多列索引,包括相关表中的列
- swift - 无法从 ORSSerialPort 接收数据
- javascript - 如何存储变量的原始形式?
- javascript - 如何捕获并报告“由于其 MIME 类型(...)和严格的 MIME 类型(...)而拒绝执行脚本”问题?
- ios - UICollectionView:旋转设备时保持单元格可见
- spring-boot - Spring Boot 和 keycloak 授权
- django - Django - 使用字符串 pk 按作者过滤帖子?