- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
后 exploding with excitement在学习如何对 Windows 窗体控件进行线程安全调用后,我开始思考......
为什么不是所有对 Windows 窗体控件的调用都是线程安全的? 谁能解释为什么?我认为这会减少这些控件用户的很多困惑。
最佳答案
这里的问题不是线程安全问题之一。这些方法都是“线程安全的”,因为它们在多个线程上同时调用时不会破坏应用程序的状态——只是线程安全包括抛出错误的线程异常(不记得它叫什么)。
它们拥有的是线程亲和性——它们只能在一个线程上被调用——有时被称为 UI 线程,尽管这是一种误导,因为它暗示只有一个线程。这主要是因为它们所依赖的操作系统调用具有相同的线程关联规则。
相信我 - 这是一件好事。当您考虑“UI 线程”的主要作用时,一切都开始变得清晰起来。 UI 线程的工作是通过键盘或鼠标从用户手中获取输入,对其进行操作,并以像素形式产生响应输出。只有一个用户,而该用户只有一组眼睛。用户希望在屏幕上看到他们所做的一切,最重要的是他们希望看到它按照他们做的顺序发生。多线程 UI 会使这很难实现——几乎不可能。
问题在于,当您将后台“工作”线程与 UI 线程混合时,您需要进行一定量的编码以与 UI 对话,因为您必须在 UI 线程上才能做到这一点。再次,正如我所说,这是一件好事。必须有人进行这种编码,否则用户会看到事情以错误的顺序发生,这很糟糕。诚然,系统可以为您做到这一点,并且在某些 WIN32 调用中确实如此——但这有问题。首先,系统无法知道您需要在什么粒度上进行编码,因此您最终可能会变得效率低下。您的操作可能会在系统可以理解的更高级别上进行更好的编码。其次,编码是昂贵的,它惩罚了做正确事情并将所有内容正确转移到 UI 线程的开发人员。所以系统会做它所能做的最少的事情,检查它是否在正确的线程上,如果不是,则抛出异常。
关于.NET 控件 : Why aren't all calls thread-safe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2798812/
自从我处理 django 以来已经有一段时间了,我正在处理一些可能有点旧的代码,现在是 Django 1.7。这个堆栈跟踪是关于什么的? 它不是通过 runserver 发生的,而是通过使用应用程序模
出于某种原因,我的表格行间距不正确,只是将新行覆盖在旧行上。我得到的不是 2 行表,而是 1 行表,其中 2 行相互重叠。这是我的代码的相关部分:
我正在尝试使用自定义用户安装 django-registration-redux。 我已将此包含在我的 settings.py 中: AUTH_USER_MODEL = 'app.customUser
我已在 azure 门户中设置了 Azure Frontdoor。我已经创建了 2个前端主机 myappdev1.azurefd.net dev1.myapp.com 后端池具有以下内容 1.Back
我已在 azure 门户中设置了 Azure Frontdoor。我已经创建了 2个前端主机 myappdev1.azurefd.net dev1.myapp.com 后端池具有以下内容 1.Back
使用来自 Django tutorial 的(部分)投票应用程序例如,我正在尝试获取 pytest-django运行。 使用命令 django-admin startproject mysite2 ,
因此,我尝试向 Django 1.10 应用程序添加一些代码,这些代码仅在服务器启动时运行。我从 here 获取了有关如何执行此操作的说明。和 here 。每次我尝试运行 python 控制台时,我都
我在 IntelliJ IDEA 中使用 Kotlin 插件时遇到问题。首先,打开一个kotlin项目,弹出我需要在这个项目中配置kotlin。但是当我从“工具”菜单中这样做时,它会显示“没有可用的配
请注意,我已经查看了这些线程,但它们没有解决我的问题: (过时的信息,请参阅下面的文档)Access Snowflake query results through PowerBI (我希望这能解决我
当 7 个可用列中的任何 3 个包含该行的数据时,我需要包含行。有没有做类似事情的最佳实践?我想出的解决方案似乎很好,只是想知道是否有更可接受的模式?见 here了解详细信息。以下是我要完成的工作的要
babel-preset-es2015已安装,并且可以使用 es6 功能,如下面 let a = 2; . 但无法使用 es6 模块功能 import fs from 'fs'如下: $ babel-
当我尝试将 View 导入 django 应用程序的 apps.py 模块时出现此错误。我正在使用 django 2.2.9、python 3.7.6、django-oscar 2.0.4。我已覆盖结
我正在使用此代码来填充我的数据库: import os def populate(): python_cat = add_cat('Python') add_page(cat=pyth
我已经将我的 django webapp 部署到我的 heroku 服务器并且它工作正常,直到我添加了一个 websocket 连接,该连接在创建模型对象后立即在单独的 url 中显示该模型对象的内容
尝试阅读文档并纠正一些与 sass 相关的问题。向组件添加了“lang=scss”,但不确定如何解决此问题。任何指导都会有所帮助。 rollup v2.19.0 bundles src/main.js
我使用 django 1.10.5 和 celery 4.0.2。我有这样的结构。 -proj -application __init__.py celery.py cel
所以我正在学习这个 javascript 游戏制作教程,但我真的找不到我做了什么才能使我的红色方 block 不显示在屏幕上。事实上,我确实认为这是速度问题,因为当我在控制台中更改对象的速度时,它出现
从 1.8 升级到 django 1.9 时出现此错误。我检查了类似问题的答案,但我认为这不是任何第三方软件包或应用程序的问题。 Traceback (most recent call last):
我从 Django 1.8 升级到 1.9 但遇到了这个问题 django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet. s
我有一个功能性 Django 应用程序,在我看来它有许多 Google Text-To-Speech API 调用和数据库读/写。在本地测试时,加载页面大约需要 3 秒,但是当我将应用程序实时部署到
我是一名优秀的程序员,十分优秀!