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


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

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

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

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

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

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

    总结得出

    普通控件在数据绑定中,通过修改数据来修改元素呈现的内容   不算访问  
    集合控件在数据绑定中,通过修改数据集内容来修改集合控件呈现的内容(集合控件包括DataGrid、ListBox、ListView等)   不算访问
    集合控件在数据绑定中,通过增加或减少数据集行数来修改集合控件呈现的内容   算访问,会引起UI重绘  
    通过元素名称,获取或修改元素的非依赖项属性值 不算访问
    通过元素名称,获取或修改元素的依赖项属性值 算访问
        
  • 相关阅读:
    JetBrains 里不为人知的秘密(2)--快捷键篇
    phpstorm 2017之输入法
    JetBrains 里不为人知的秘密
    Windows Server 2012 远程连接
    visibility和display的区别
    【dp】摘花生
    【dp】 背包问题
    【dp】求最长公共子序列
    【dp】合唱队形
    【dp】友好城市
  • 原文地址:https://www.cnblogs.com/lztwj/p/7216299.html
Copyright © 2020-2023  润新知