zoukankan      html  css  js  c++  java
  • 创建UI的线程才能访问UI,那么怎样才算访问UI呢

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

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

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

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

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

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

    总结得出

    普通控件在数据绑定中,通过修改数据来修改元素呈现的内容   不算访问  
    集合控件在数据绑定中,通过修改数据集内容来修改集合控件呈现的内容(集合控件包括DataGrid、ListBox、ListView等)   不算访问
    集合控件在数据绑定中,通过增加或减少数据集行数来修改集合控件呈现的内容   算访问,会引起UI重绘  
    通过元素名称,获取或修改元素的非依赖项属性值 不算访问
    通过元素名称,获取或修改元素的依赖项属性值 算访问
        
  • 相关阅读:
    Infosec institute n00bs CTF writeup
    CTF学习之CODE
    ThinkPHP函数详解:C方法
    流程控制的替代语法
    Jquery DOM
    YII2 请求(request)
    YII2 运行概述(Overview)
    YII2 小部件(widgets)
    YII2 过滤器 filters
    YII2 随笔 视图最佳实践
  • 原文地址:https://www.cnblogs.com/lztwj/p/7216299.html
Copyright © 2011-2022 走看看