只有创建UI元素的线程(主线程又叫UI线程)才能访问UI元素。在UI线程中工作,不会有这个问题。

在后台线程中,如果直接访问UI元素,会抛出 “调用线程无法访问此对象,因为另一个线程拥有该对象” 异常。

在后台线程中,集合控件绑定在数据集上,增加或减少数据集会引起UI重绘,会抛出 “该类型的 CollectionView 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改” 异常。

在后台线程中工作,将访问UI的工作封送到UI线程来避免这个问题。

那么,怎么样的动作算是访问UI元素呢?

最简单的判断方法就是看所调用的方法/属性是否会调用 DispatcherObject 的 VerifyAccess()方法

总结得出

普通控件在数据绑定中,通过修改数据来修改元素呈现的内容   不算访问  
集合控件在数据绑定中,通过修改数据集内容来修改集合控件呈现的内容(集合控件包括DataGrid、ListBox、ListView等)   不算访问
集合控件在数据绑定中,通过增加或减少数据集行数来修改集合控件呈现的内容   算访问,会引起UI重绘  
通过元素名称,获取或修改元素的非依赖项属性值 不算访问
通过元素名称,获取或修改元素的依赖项属性值 算访问
    

创建UI的线程才能访问UI,那么怎样才算访问UI呢的更多相关文章

  1. [置顶] 使用严苛模式打破Android4.0以上平台应用中UI主线程的“独断专行”

    传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 已经有好一段时间没有关注Android应用方面的事情了:)最近单位来了一个Androi ...

  2. handler更新UI主线程

    示例:下面代码的功能是修改UI主线程TextView的内容 public class MainActivity extends Activity { private Button btn_start; ...

  3. 翻译 异步I/O不会创建新的线程

    异步I/O不会创建新的线程 本文翻译自 Stephen Cleary 的 [There is No Thread] 原文地址 https://blog.stephencleary.com/2013/1 ...

  4. qt 中创建一个工作线程(例子)

    当一个事件需要很长的处理时间,就创建一个工作线程,防止主界面卡死. 1.新建一个QT的gui项目,里面包含main.cpp,mainwindow.h,mainwindow.cpp,mainwindow ...

  5. java线程 — 创建和启动线程

    创建和启动线程,传统有两种方式: 方式1:继承Thread类: 方式2:实现Runnable接口: 线程类(java.lang.Thread):Thread类和Thread的子类才能称之为线程类.阅读 ...

  6. day 33 什么是线程? 两种创建方式. 守护线程. 锁. 死锁现象. 递归锁. GIL锁

    一.线程     1.进程:资源的分配单位    线程:cpu执行单位(实体) 2.线程的创建和销毁开销特别小 3.线程之间资源共享,共享的是同一个进程中的资源 4.线程之间不是隔离的 5.线程可不需 ...

  7. Linux 循环创建多个线程

    这里说一下相关的基础知识: 线程概念 什么是线程 LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下)     进程:独立地址空间,拥有PCB     线 ...

  8. 重点:怎样正确的使用QThread类(很多详细例子的对比,注意:QThread 中所有实现的函数是被创建它的线程来调用的,不是在线程中)good

    背景描述: 以前,继承 QThread 重新实现 run() 函数是使用 QThread唯一推荐的使用方法.这是相当直观和易于使用的.但是在工作线程中使用槽机制和Qt事件循环时,一些用户使用错了.Qt ...

  9. java线程基础巩固---创建并启动线程

    对于java的并发编程方面的东东,不管是面试还是实际工作开发都是非常重要的,而往往只要涉及到并发相关的东东有点让人觉得有点难,而实际工作中涉及到并发可能就是简单的用下同步块.上锁之类的一些简单的操作, ...

随机推荐

  1. CF_127E reader Display

    这道题其实找到规律之后其实不难,和破损的键盘一样,都有点递推转移的感觉 题意: 你可以进行这样一次操作:选一个点,然后把这个点横切竖切直到正对角线上面的点,全部翻转过来,问你要进行多少次操作才能把所有 ...

  2. Javascript优点和缺点

    优点: 函数是顶级对象 基于原型继承的动态对象 对象字面量和数组字面量 缺点: 全局变量 作用域 自动插入分号 保留字 Unicode typeof parseInt + 浮点数 NaN

  3. P4363 [九省联考2018]一双木棋

    题面 这种搜索要把后继状态都跑出来之后取Min/Max 也就是回溯的时候进行操作 记得用hash进行记忆化(用map不开O2会TLE) #include<iostream> #includ ...

  4. ARC080E

    倒着考虑 每次拿出的第一个必须是奇数位置,第二个必须是偶数位置.每次删数都不能跨过已被删去的位置. 事实上只要开个堆维护一下区间就行了.但是众所周知我zz,所以我写的线段树 #include<i ...

  5. 晒订单赢图灵图书,《第一行代码——Android》福利活动劲爆来袭!

    版权声明:本文出自郭霖的博客,转载必须注明出处. https://blog.csdn.net/sinyu890807/article/details/28863515 (已结束) 我的著作<第一 ...

  6. typescript 类型映射 (ReadOnly、Partial)

    有时候需要一个类型,是依赖于上一个类型但是,对属性的要求去不同 interface Person{ name: string; agent: number; } type Person2 = Read ...

  7. TreeMap和TreeSet在排序时如何比较元素,Collections工具类中的sort()方法如何比较元素

    TreeSet和TreeMap排序时比较元素要求元素对象必须实现Comparable接口 Collections的sort方法比较元素有两种方法: 元素对象实现Comparable接口 实体类Dog ...

  8. Light项目---vue搭建前端时遇见的一些问题

    css样式中设置的: opacity 表示透明度 将js对象存储到localStorge中 的时候,直接存储是不行的,会变成[object Object],都是这样的数据, 需要将其进行JSON化处理 ...

  9. su - 运行替换用户和组标识的shell

    SYNOPSIS(总览) su [OPTION]... [-] [USER [ARG]...] DESCRIPTION(描述) 修改有效用户标识和组标识为USER的. -, -l, --login 使 ...

  10. 第一章 笔记本电脑安装Linux系统(Centos7)

    目标:通过[Linux+Docke+Nginx+Jenkins+k8s(Kubernetes)+CICD(自动化)]进行项目部署 内容:根据个人进度实时分章节记录自己所遇到的问题 一.准备工作 1.下 ...