c# - 关于使用 c# 在 Winforms 中与 UI 线程同步的基本问题
问题描述
我知道 Winforms 只有一个 UI 线程,如果您需要在另一个线程上更新它,您应该使用调用方法。
我的问题是,如果您正在做的事情不会改变任何控件的外观,那仍然会访问 UI 线程吗?
例如,我的 form1 有一个记录器,它将消息写入用户根本看不到的本地文件。如果我在另一个线程中使用记录器,比如写一条新消息,这是否会被视为访问 UI 线程?是的,记录器在 form1.cs 中初始化,但它在表单上根本没有可视化表示。我还需要使用调用吗?
另外,如果我有一个扩展文本框的自定义控件。自定义控件有一个名为 initialized 的属性。更改此属性对控件的外观没有任何影响。那么,如果我从另一个线程更新这个属性,我需要使用调用方法吗?
解决方案
如果只有一个线程使用 logger 实例,则不需要同步,否则如果多个线程可以写入,则需要同步,而不是与 UI 线程同步,而是在线程之间同步,例如使用锁或监视器。
最后一个问题也是一样。
推荐阅读
- email - 使用 Apache Tika 解析 mbox 文件时获取邮件元数据
- excel - VBA sub 在单独运行时工作正常,但在其他宏之前和之后运行时会出现奇怪的事情(虽然没有错误)
- html - 如何防止 check_box_tag 将其状态与值一起传递?
- node.js - Node.js json2csv 选项扁平化语法
- quickfixj - QuickfixJ - 创建 socketInitiator 的更好方法
- node.js - “for”循环使我的数据 == 未定义
- composer-php - 如何使用 Composer 2 安装 GrumPHP?
- ruby-on-rails - Rails Oauth 设计 Omniauth
- c# - 在 C# 中创建一个每次都可以具有不同属性的类或对象
- angular - OpenLayers RasterSource 操作回调找不到对象函数