场景:线程里面构建MVVM实体类,实体类包含 Brush 属性时,构建 SolidColorBrush 需要UI线程,否则会报 “必须在与 DependencyObject 相同的线程上创建 DependencySource”

MVVM实体类

 1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Linq;
5 using System.Text;
6 using System.Threading.Tasks;
7 using System.Windows.Media;
8
9 namespace WpfApp3
10 {
11 public class TestInfo : INotifyPropertyChanged
12 {
13 public event PropertyChangedEventHandler PropertyChanged;
14
15 public Brush BG { get; set; }
16 }
17 }

实体类

下面是报错代码:

 1 <Window x:Class="WpfApp3.MainWindow"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 xmlns:local="clr-namespace:WpfApp3"
7 mc:Ignorable="d"
8 Title="MainWindow" Height="450" Width="800">
9 <Grid Background="{Binding BG}">
10
11 </Grid>
12 </Window>

前端

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6 using System.Windows;
7 using System.Windows.Controls;
8 using System.Windows.Data;
9 using System.Windows.Documents;
10 using System.Windows.Input;
11 using System.Windows.Media;
12 using System.Windows.Media.Imaging;
13 using System.Windows.Navigation;
14 using System.Windows.Shapes;
15
16 namespace WpfApp3
17 {
18 /// <summary>
19 /// MainWindow.xaml 的交互逻辑
20 /// </summary>
21 public partial class MainWindow : Window
22 {
23 public MainWindow()
24 {
25 InitializeComponent();
26
27 Loaded += MainWindow_Loaded;
28 }
29
30 private async void MainWindow_Loaded(object sender, RoutedEventArgs e)
31 {
32 TestInfo info = new TestInfo();
33 await Task.Run(() =>
34 {
35 info.BG = new SolidColorBrush(Colors.Red);
36 });
37 this.DataContext = info;
38 }
39 }
40 }

后端

原因:

因为  info.BG = new SolidColorBrush(Colors.Red);  这行报错,原因是 构建 SolidColorBrush 需要UI 线程!!

调整后的后端代码:

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6 using System.Windows;
7 using System.Windows.Controls;
8 using System.Windows.Data;
9 using System.Windows.Documents;
10 using System.Windows.Input;
11 using System.Windows.Media;
12 using System.Windows.Media.Imaging;
13 using System.Windows.Navigation;
14 using System.Windows.Shapes;
15
16 namespace WpfApp3
17 {
18 /// <summary>
19 /// MainWindow.xaml 的交互逻辑
20 /// </summary>
21 public partial class MainWindow : Window
22 {
23 public MainWindow()
24 {
25 InitializeComponent();
26
27 Loaded += MainWindow_Loaded;
28 }
29
30 private async void MainWindow_Loaded(object sender, RoutedEventArgs e)
31 {
32 TestInfo info = new TestInfo();
33 await Task.Run(() =>
34 {
35 Brush brush = null;
36 Dispatcher.Invoke(() =>
37 {
38 brush = new SolidColorBrush(Colors.Red);
39 });
40 info.BG = brush;
41 });
42 this.DataContext = info;
43 }
44 }
45 }

后端

MVVM绑定 填坑,必须在与 DependencyObject 相同的线程上创建 DependencySource的更多相关文章

  1. Android填坑系列:在小米系列等机型上放开定位权限后的定位请求弹框

    背景: 近期因实际项目需要,在特定操作下触发定位请求,取到用户位置及附近位置. 问题: 经初步选型,最终决定接入百度定位,按照百度定位SDK Android文档,接入过程相对顺利.但随后发现,在小米系 ...

  2. 小程序textarea完美填坑

    相信做微信小程序的码友们都被textarea这个原生组件坑过,什么placeholder位置错乱,穿透弹窗或遮罩层,ios上输入法弹起后换行输入内容遮挡,删除输入内容时内容被遮挡等等... 反正综上所 ...

  3. [Xamarin]我的Xamarin填坑之旅(二)

    上一篇交代了我Xamarin填坑的背景,大概聊了聊第一步环境配置,第二步创建项目和开发框架选择.如果有一个可用的梯子,这部分基本不会出错. 接下来就具体聊一聊写代码的过程中遇到的一些事儿. 第三步是码 ...

  4. 填坑系列:通过ESXi来配置IPMI

    近日西安的天气很不错,可是看到从其他地方迁移来的主机在新环境下无法远程调试怪郁闷的,这就需要填坑,要不就会给后来者挖更大的坑. 今天遇到的坑是在IPMI的网络设置里面启用了VLAN标签之后,在新环境下 ...

  5. bootstrap-table填坑之旅<一>认识bootstrap-table

    应公司需求,改版公司ERP的数据显示样式.由于前期开发的样式是bootstrap,所以选bootstrap-table理所当然(也是因为看了bootstrap-table官网的example功能强大, ...

  6. Android Tips – 填坑手册

    出于: androidChina   http://www.androidchina.net/3595.html 学习 Android 至今,大大小小的坑没少踩,庆幸的是,在强大的搜索引擎与无私奉献的 ...

  7. React Native填坑之旅--ListView篇

    列表显示数据,基本什么应用都是必须.今天就来从浅到深的看看React Native的ListView怎么使用.笔者写作的时候RN版本是0.34. 最简单的 //@flow import React f ...

  8. WebApi传参总动员(填坑)

    本以为系列文章已经Over,突然记起来前面留了个大坑还没填,真是自己给自己挖坑. 这个坑就是: (body 只能被读取一次)Only one thing can read the body MVC和W ...

  9. React Native填坑之旅 -- 使用iOS原生视图(高德地图)

    在开发React Native的App的时候,你会遇到很多情况是原生的视图组件已经开发好了的.有的是系统的SDK提供的,有的是第三方试图组件,总之你的APP可以直接使用的原生视图是很多的.React ...

  10. Webapi创建和使用 以及填坑(二)

    Webapi创建和使用 以及填坑(二) 上篇文章由于时间问题没能讲到POST提交,今天做一个补充 POST: 当我们直接通过POST发送方式发送会发现错误信息 参考解决:https://www.cnb ...

随机推荐

  1. 【译】轻松评估 AI 应用程序的质量

    原文 | Wendy Breiding 翻译 | 郑子铭 在构建利用 AI 的应用程序时,能够有效地评估 SLM(小型语言模型)或 LLM(大型语言模型)的响应从未如此重要. 评估是指评估 AI 模型 ...

  2. JAVA运算符及实例

    JAVA语言支持以下运算符 优先级() 算数运算符:+,-,*,/,%,++,-- 实例1:  package operator; ​ public class Demo01 {     public ...

  3. 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。

    这是一座专属你的知识宝库,它依托 DeepSeek R1 满血版大模型构建而成.在这里,每一次回答都源自对你专属文件的深度学习,精准匹配你的知识需求,为你输出最贴合文件内容的答案 . 使用 Cherr ...

  4. salesforce零基础学习(一百四十三)零碎知识点小总结(十一)

    本篇参考: https://help.salesforce.com/s/articleView?id=release-notes.rn_lab_dynamic_highlights_panel.htm ...

  5. 面试官最想听到的Vue和React区别

    前言 欧阳最近找工作面试时总是被问到两个问题:Vue和React的区别和从编译原理的角度来聊聊Vue的template和React的jsx.面试官问这些问题一般是想了解你对这两个框架的理解,所以这是一 ...

  6. [联合省选 2020A] 组合数问题 题解

    后面有一只大大的组合数,考虑下降幂干过去.\(x^k\) 并不好使,这边考虑转化 \(f(x)=\sum a_ix^i=\sum b_ix^\underline i\). \[\sum_{k=0}^n ...

  7. Type-C协议(CC检测原理)-CC1和CC2接电阻-数字和模拟耳机兼容

    1 简介 USB Type-C其实是USB的一种接口形态,USB的接口形态可以分为USB Type-A.USB Type-B.USB Type-C,USB Type-A和USB Type-B还有两种不 ...

  8. QT5笔记: 20. QStringListModel的使用

    主要为 :添加.插入.修改.删除.清空等操作 例子:本例子中QListView 没有做任何处理,只是拖放至ui文件,设置了布局 MainWindow.h #ifndef MAINWINDOW_H #d ...

  9. autMan奥特曼机器人-内置wx机器人的相关说明

    内置wx机器人的相关说明 内置wxbot机器人,经常有人说在群内无回复,做以下几个工作: 给群命名 通过机器人微信APP将此群加入到通讯录 重启autMan 内置微信机器人已经支持群名设置 例如转发时 ...

  10. 机器学习中的 K-均值聚类算法及其优缺点

    K-均值聚类算法是一种经典的机器学习算法,用于将数据集分成 K 个不同的簇.它是一种无监督学习算法,即不需要标签或任何先验知识来指导聚类过程. 算法的工作原理如下: 随机选择 K 个数据点作为初始聚类 ...