为什么 UI 元素必须始终从 UI 线程创建/更新?

2023-11-26

为什么 UI 元素必须始终从 UI 线程创建/更新?

在(几乎?)所有编程语言中,UI 元素只能从 UI 线程安全地访问/修改。我知道这是一个标准的并发访问和同步问题,但真的有必要吗?这种行为是由编程语言还是操作系统强加的?有没有什么编程语言可以改变这种情况?


它是由图形框架强加的——通常(但并非总是)由操作系统提供。

基本上,让一切“适当地线程安全”是低效的。虽然必须将回调编组回 UI 线程确实很痛苦,但它允许 UI 线程本身非常快速地处理事件,而不必担心锁定等问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 UI 元素必须始终从 UI 线程创建/更新? 的相关文章

  • JavaFX 中具有自定义内容的 ListView

    How i can make custom ListView with JavaFx for my app I need HBox with image and 2 Labels for each line listView 您可以通过查看
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 评估 CRC-32 实现中的差异

    我见过相同基本 CRC 32 算法的许多不同实现 如下所示 int remain int sbox SIZESBOX int dividend int bit for dividend 0 dividend lt SIZESBOX divi
  • 缓冲后台输入流实现

    我已经写了背景InputStream and OutputStream 包装其他流并在后台线程上预读的实现 主要允许在处理解压缩流的不同线程中进行解压缩 压缩 这是一个相当标准的生产者 消费者模型 这似乎是一种利用多核 CPU 的简单方法
  • 如何唤醒正在休眠的线程?

    我在加载事件中创建了一个线程 如下所示 Thread checkAlert null bool isStop false private void frmMain Load object sender EventArgs e checkAl
  • 进度条没有进展

    我有一个正在更新 sqlserver 中的表的程序 我有一个表单 我想显示其进度 进度条正在递增 但没有显示 我需要为此使用后台工作者吗 我正在做什么的例子 public void updateTable string tableName
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • 如何向 PyQt5 GUI 添加线程?

    所以我使用 QT Designer 创建了一个 GUI 它工作得很好 但在更复杂的调用中 它不会更新主窗口并锁定 我想运行我的CustomComplexFunction 在根据不断变化的后端信息更新主窗口中的文本编辑时 我希望它每 2 秒运
  • Netty UDP 服务器中的线程未同时执行

    我正在分析的代码使用 Netty NioDatagramChannelFactory 创建 UDP 服务器 它创建一个线程池 ExecutorService threadPool Executors newCachedThreadPool
  • 使用循环在 C 中管道传输两个或多个 shell 命令

    我正在尝试执行ls wc l通过 C 语言程序 而不是使用命令行 这是我当前的工作代码 int main int pfds 2 pipe pfds pid t pid fork if pid 0 The child process clos
  • ASP.NET MVC 多线程

    我想在我的 asp net mvc 应用程序中实现这样的逻辑 user clicks a button gt server executes some time consuming logic in 15 threads i get dat
  • 如何使用 c++11 CAS 实现 ABA 计数器?

    我正在基于此实现一个无锁队列算法 http www cs rochester edu research synchronization pseudocode queues html 它使用计数器来解决 ABA 问题 但我不知道如何用c 11
  • 领域驱动设计与模型驱动架构

    我很好奇 领域驱动设计和模型驱动架构有什么区别 我的印象是他们有某些相似之处 你能启发我吗 Thanks 不要不同意上面的大部分内容 尽管它可能值得稍微扩展一下 DDD 中最重要的一个概念是关注问题域 将对技术的痴迷放在一边 主要集中于对您
  • 设置 SWT Shell 的默认字体

    有没有办法为整个 Shell 设置默认字体 以便任何新控件都将使用相同的字体 看来现在我必须为我创建的每个控件设置字体 这导致了太多的冗余 默认使用的字体由平台选择 请参阅中的其他信息 类字体 SWT 标准小部件工具包 http book
  • 在 Haskell 中创建 100 万个线程需要多长时间?

    据我了解 Haskell 有绿色线程 但它们的重量有多轻 是否可以创建100万个线程 或者 100 000 个线程需要多长时间 from here http www reddit com r programming comments a4n
  • 使用 AJAX 或多线程加速页面加载

    我的页面有 5 个部分 每个部分大约需要 1 秒来渲染 Page Load RenderSection1 1 sec RenderSection2 1 sec RenderSection3 1 sec RenderSection4 1 se
  • QThread - 使用槽 quit() 退出线程

    我想在线程完成运行时通知对象 但是 我无法让线程正确退出 我有以下代码 处理器 cpp thread new QThread tw new ThreadWorker connect tw SIGNAL updateStatus QStrin
  • 我们可以有虚假中断吗?

    我正在创建一个任务轮询器 每分钟都会查找任务 它看起来像这样 public class Poller private final ExecutorService e Executors newSingleThreadExecutor pub
  • 理解 C++11 中的 std::atomic::compare_exchange_weak()

    bool compare exchange weak T expected T val compare exchange weak 是 C 11 中提供的比较交换原语之一 它是weak即使对象的值等于 它也会返回 falseexpected

随机推荐

  • XSLT 混合内容节点

    我有一个很愚蠢的问题 如何确保我的 XML 混合内容节点不会混淆 比如说 我有一个与此类似的 XML 结构
  • 如何在Android中设置进度条的最大值[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我想设置 a 的最大值Pr
  • GDB 中的格式化打印

    我想做printf风格印刷来自GDB 例如 我想打印一个变量值 但用一些文本来描述它是什么 可以吗 如果可以的话 能举个例子吗 你可以非常多地使用printf in gdb如下 gdb printf s x Hello world gdb
  • Laravel 样式表和 javascript 不会加载非基本路由

    好吧 我知道这是一个非常基本的问题 但我无法弄清楚 这是一个关于 Laravel 的问题 基本上 我将样式表嵌入到我的默认布局视图中 我目前只是使用常规 css 来链接它们 例如 当我处于单级路线时 例如 about 但是当我深入时停止工作
  • 类 C 语言中的返回类型多态性

    为什么我们没有看到类似 C 的语言允许在返回类型中具有多态性的可调用对象 我可以看到附加类型推断将成为一个障碍 但我们有很多语言具有成熟的类型推理系统 适用于不同级别的 工作 Edit 通过返回类型多态性 我的意思是仅在返回类型中重载函数签
  • 使用 TextDecoder/TextEncoder 将 ArrayBuffer 转换为 String,然后返回 ArrayBuffer,返回不同的结果

    我有一个 ArrayBuffer 它是通过使用 Frida 读取内存而返回的 我将 ArrayBuffer 转换为字符串 然后使用 TextDecoder 和 TextEncoder 返回 ArrayBuffer 但结果在此过程中发生了变化
  • Java 中保存连接字符串参数的配置文件

    我有 ASP Net 背景 我现在正在编写一个Java 程序 将数据从DB2 数据库导入到Oracle 数据库中 我已经完成了导入此数据的基本功能 我遇到的问题是 我将所有连接属性都编码到了 Java 程序本身中 是否有任何 最佳实践 方法
  • CSS:如何使光标成为输入文件上的指针?

    当鼠标悬停时 如何使光标成为输入文件或输入文本上的指针 我尝试过 但当然行不通
  • password_hash 的盐存储在哪里?

    根据 相对 新的 PHP 文档 The 密码哈希值函数使用随机盐 我们不应该担心 O O 所以如果我理解正确 盐必须存储在某个地方 否则用户在注册网站后将无法登录 不同的盐 gt 不同的哈希值 该函数文档没有告诉任何有关与数据库交互的信息
  • 是否有基于其他运算符自动提供的 C++ 运算符重载? [复制]

    这个问题在这里已经有答案了 假设我正在写一个int包装器并需要提供每个操作符重载 作者是否必须列出每一项 还是可以根据作者提供的内容自动生成任何一项 编译器是否可以从现有的运算符中推断出任何新的自动定义运算符 如果我定义operator 它
  • 在 iOS 7 中强制横向和自动旋转

    我的应用程序应该只是横向的 在构建时我没有遇到任何问题iOS 6和更早的时候 现在与iOS 7 它根本不会旋转 在我的应用程序设置中 我将其设置为仅横向左 右 在我的视图控制器中 我使用以下内容 NSUInteger supportedIn
  • 如何在 web.config 文件中更改我的 asp.net 网站的默认时区

    我正在尝试更改我的 asp net 网站的默认时区 我尝试了以下代码 但它不起作用
  • 如何为 List 实现 Parcelable

    我正在尝试在我的可打包中传递一个列表 public class MetaDados implements Parcelable private List
  • 哈希表与 C++ 中的 STL 映射

    我正在尝试学习 C 地图 只是想知道STL图的实现 我读到它采用了二叉搜索树 STL中有哈希表的实现吗 STL映射到底是如何存储键值对的 典型的 STL 实现基于红黑树 C TR1 提供了 std tr1 unordered map 它使用
  • 如何在 JMeter 中进行 OAuth 2.0 身份验证?

    我正在尝试对一些需要身份验证的 API OAuth 2 0 进行功能测试 并在 JMeter 中进行模拟 我正在尝试验证 Azure 云的 OAuth 服务 有没有人能够成功创建 JMeter HTTP 请求来针对 OAuth 2 0 进行
  • 在文本选择上显示自定义菜单

    您好 我希望能够在用户选择一些与媒体提供的文本非常相似的文本时显示自定义菜单 或上下文菜单 如何实现这样的事情 我知道本机 jquery 上下文菜单插件 但我如何知道用户何时选择文本 浏览器的onselect似乎仅在输入元素上受支持 这是一
  • PHP 的合并函数?

    许多编程语言都有合并函数 返回第一个非 NULL 值 example 遗憾的是 2009 年 PHP 还没有做到这一点 在 PHP 本身获得合并函数之前 在 PHP 中实现一个合并函数的好方法是什么 php 5 3 中有一个新的运算符可以执
  • 如何在 cmd start 中使用引号?

    这是我想做的事 start wait c Program Files NetDrive2 nd2cmd exe c m t ftp blabla If I do start wait c Program Files NetDrive2 nd
  • 如何在 Anaconda Env 中启动 Visual Studio Code

    我在 Windows 10 PC 上的 Visual Studio Code 中运行 Python 程序时遇到问题 当我从终端启动 python 会话并说import cv2我没有收到任何错误 当我通过命令提示符并启动时VSCode从环境中
  • 为什么 UI 元素必须始终从 UI 线程创建/更新?

    为什么 UI 元素必须始终从 UI 线程创建 更新 在 几乎 所有编程语言中 UI 元素只能从 UI 线程安全地访问 修改 我知道这是一个标准的并发访问和同步问题 但真的有必要吗 这种行为是由编程语言还是操作系统强加的 有没有什么编程语言可