• 创建UI的线程才能访问UI,那么怎样才算访问UI呢


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

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

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

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

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

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

    总结得出

    普通控件在数据绑定中,通过修改数据来修改元素呈现的内容   不算访问  
    集合控件在数据绑定中,通过修改数据集内容来修改集合控件呈现的内容(集合控件包括DataGrid、ListBox、ListView等)   不算访问
    集合控件在数据绑定中,通过增加或减少数据集行数来修改集合控件呈现的内容   算访问,会引起UI重绘  
    通过元素名称,获取或修改元素的非依赖项属性值 不算访问
    通过元素名称,获取或修改元素的依赖项属性值 算访问
        
  • 相关阅读:
    export环境变量 & bash shell使用命令和环境变量
    crontab定时任务
    sh脚本
    Linux的用户及权限相关
    HTTP基础
    群晖Synology
    Cntlm
    oracle存储过程
    ORACLE 增加两列字段
    excel 公式 insert 语句
  • 原文地址:https://www.cnblogs.com/lztwj/p/7216299.html
Copyright © 2020-2023  润新知