textbox跨线程写入
实现实例1
实现效果

跨线程实现
// 委托,用于定义在UI线程上执行的方法签名 //public delegate void SetTextCallback(string text);public void textBoxText(string text){// 检查调用线程是否是创建控件的线程 if (textBox1.InvokeRequired){// 如果不是,则使用Invoke在正确的线程上执行 //方法1 测试通过1//SetTextCallback d = new SetTextCallback(textBoxText);//textBox1.Invoke(d, new object[] { text });//方法2 测试通过2//Action<string> dlg = new Action<string>(textBoxText);//textBox1.Invoke(dlg, text);//方法3 测试通过3textBox1.Invoke(new Action<string>(textBoxText), text);}else{// 如果是,则直接设置Text属性 textBox1.Text = text;}}
调用跨线程
private void button1_Click(object sender, EventArgs e){// 在一个后台线程中更新TextBox Task.Run(() =>{while (true){// 模拟一些工作 Thread.Sleep(100);// 安全地更新TextBox的文本 textBoxText( DateTime.Now.ToString("HH:mm:ss:fff") + " 后台赋值2");}});}
实现实例2
在Windows Forms应用程序中,跨线程写入TextBox控件通常是不安全的,因为它违反了UI控件的线程亲和性规则。UI控件只能由创建它们的线程(通常是主UI线程)访问和修改。如果尝试从其他线程直接修改TextBox的Text属性,可能会遇到不可预测的行为,如异常、界面冻结或数据不一致。
为了确保线程安全地更新TextBox控件的内容,你应该使用控件的Invoke或BeginInvoke方法,这些方法允许你在控件的拥有线程上执行委托。Invoke方法是同步的,它会等待操作完成,而BeginInvoke是异步的,不会等待。
以下是一个简单的示例,展示了如何安全地从另一个线程更新TextBox控件的文本:
参考代码
using System;
using System.Threading;
using System.Windows.Forms; public partial class MainForm : Form
{ private TextBox textBox; public MainForm() { InitializeComponent(); textBox = new TextBox(); textBox.Dock = DockStyle.Fill; this.Controls.Add(textBox); // 启动一个后台线程来更新TextBox Thread newThread = new Thread(() => { // 模拟一些工作 Thread.Sleep(1000); // 安全地更新TextBox的文本 UpdateTextBoxFromAnotherThread("这是从另一个线程安全地写入的文本!"); }); newThread.Start(); } // 使用Invoke确保在UI线程上更新TextBox private void UpdateTextBoxFromAnotherThread(string text) { // 检查是否需要跨线程调用 if (textBox.InvokeRequired) { textBox.Invoke(new MethodInvoker(delegate { textBox.Text = text; })); } else { textBox.Text = text; } }
}
在上面的代码中,UpdateTextBoxFromAnotherThread方法负责更新TextBox的文本。它首先检查是否需要跨线程调用,如果是,则使用Invoke方法来在UI线程上执行一个匿名委托,该委托设置TextBox的Text属性。如果不需要跨线程调用(即代码已经在UI线程上执行),则直接更新TextBox的文本。
请注意,这种方法也适用于其他UI控件,如Label、ComboBox、ListBox等。只需将TextBox替换为相应的控件名称,并相应地调整代码即可。
参考链接
textbox文本框跨线程写入,扩展textobx控件-CSDN博客
https://blog.csdn.net/anlog/article/details/136256340?spm=1001.2014.3001.5502
特此记录
anlog
2024年2月27日
相关文章:
textbox跨线程写入
实现实例1 实现效果 跨线程实现 // 委托,用于定义在UI线程上执行的方法签名 //public delegate void SetTextCallback(string text);public void textBoxText(string text){// 检查调用线程是否是创建控件的线程 if (textBox1.InvokeRequired){// 如果不是&#…...
幻兽帕鲁专用服务器搭建之Linux部署配置教程
大家好我是飞飞,上一期我分享了Windows系统的幻兽帕鲁服务器搭建教程。因为幻兽帕鲁这游戏对服务器的配置有一定的要求,很多小伙伴就寻思用Linux系统搭建占用会不会小一点?有计算机基础的小伙伴都知道Linux系统和Windows系统相比,…...
Kubernetes: 本地部署dashboard
本篇文章主要是介绍如何在本地部署kubernetes dashboard, 部署环境是mac m2 下载dashboard.yaml 官网release地址: kubernetes/dashboard/releases 本篇文章下载的是kubernetes-dashboard-v2.7.0的版本,通过wget命令下载到本地: wget https://raw.githubusercont…...
Outlook邮箱IMAP密码怎么填写?账户设置?
Outlook邮箱IMAP密码是什么?Outlook如何设置IMAP? 许多用户会选择通过IMAP协议将邮箱与各种邮件客户端进行连接。而在设置过程中,填写IMAP密码是必不可少的一步。那么,Outlook邮箱的IMAP密码应该如何填写呢?接下来&am…...
[计算机网络]--I/O多路转接之poll和epoll
前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、poll函…...
【NTN 卫星通信】卫星和无人机配合的应用场景
1 场景概述 卫星接入网是一种有潜力的技术,可以为地面覆盖差地区的用户提供无处不在的网络服务。然而,卫星覆盖范围对于位于考古或采矿地点内部/被茂密森林覆盖的村庄/山谷/靠近山丘或大型建筑物的用户可能很稀疏。因此,涉及卫星接入和无人驾…...
Git 分布式版本控制系统
Git是一个分布式版本控制系统,可以记录项目文件的变动并管理项目的不同版本。以下是Git的基本概念和使用方式: 仓库(Repository):Git用仓库来存储项目文件。仓库可以是本地仓库,也可以是远程仓库࿰…...
ng : 无法将ng项识别为 cmdlet、函数、脚本文件或可运行程序的名称
ng : 无法将“ng”项识别为 cmdlet、函数、脚本文件或可运行程序的名称”,出现这种错误,那说明你angular-cli没有下载所以环境变量里没有相应的东西 1、需要在cmd里输入npm install -g angular/cli 2、之后运行angular命令时还可能出现这种错误 “ng : …...
iOS小技能:苹果书签打包教程【WebClip描述文件(WebClip Configuration Profile)】
文章目录 引言I WebClip描述文件1.1 属性说明1.2 利用Apple Configurator 2生成描述文件II 部署方式和签名2.1 对 .mobileconfig 文件进行签名2.2 部署方式引言 WebClip描述文件(WebClip Configuration Profile)是一种用于iOS设备的简易配置文件,它可以在你的iOS设备(如iP…...
Spring Cloud项目合规性注册之-(单元集成测试报告)
用于合规性注册,本文章仅提供模板 这个大纲涵盖了从单元测试到集成测试,再到自动化和持续集成的全方位测试过程。 一、引言 1. 项目概述 "xxxxxx"是一个先进的数据管理和展示平台,旨在提供高效、可靠的数据服务。该平台通过集成各…...
IntelliJ IDEA 常用的插件
IntelliJ IDEA有很多常用的插件,这些插件可以扩展IDE的功能,提高开发效率。以下是一些常用的插件: Maven Helper:这是一款分析Maven依赖冲突的插件。在没有此插件时,查看Maven的依赖树和检查依赖包冲突可能需要输入命…...
超详细红黑树的模拟实现
前言 有人说设计出AVL树的的人是个大牛,那写红黑树(RBTree)的人就是天才! 上一篇文章,我们已经学习了AVL树,牛牛个人认为AVL树已经够优秀了,那让我们一起探究一下,为什么红黑树比AV…...
【亚马逊云科技】通过Amazon CloudFront(CDN)快速访问资源
文章目录 前言一、应用场景二、【亚马逊云科技】CloudFront(CDN)的优势三、入门使用总结 前言 前面有篇文章我们介绍了亚马逊云科技的云存储服务。云存储服务主要用于托管资源,而本篇文章要介绍的CDN则是一种对托管资源的快速访问服务&#…...
ES-ES的基本概念
ES的基本概念 一、文档 1.1 文档相关概念 ES是面向文档的,文档是所有可搜索数据的最小单位,可以对比理解为关系型数据库中的一条数据 日志文件中的一条日志信息一本电影的具体信息/一张唱片的详细信息 文档会被序列化成JSON格式保存在ES中 JSON对象由…...
排序算法——快速排序的非递归写法
快速排序的非递归 我们写快速排序的时候,通常用的递归的方法实现快速排序,那么有没有非递归的方法实现快速排序呢?肯定是有的。思想还是一样的,不过非递归是看似是非递归其实还是递归。 思路解释 快速排序的非递归使用的是栈这…...
【论文阅读】基于人工智能目标检测与跟踪技术的过冷流沸腾气泡特征提取
Bubble feature extraction in subcooled flow boiling using AI-based object detection and tracking techniques 基于人工智能目标检测与跟踪技术的过冷流沸腾气泡特征提取 期刊信息:International Journal of Heat and Mass Transfer 2024 级别:EI检…...
RabbitMQ讲解与整合
RabbitMq安装 类型概念 租户 RabbitMQ 中有一个概念叫做多租户,每一个 RabbitMQ 服务器都能创建出许多虚拟的消息服务器,这些虚拟的消息服务器就是我们所说的虚拟主机(virtual host),一般简称为 vhost。 每一个 vhos…...
python 基础知识点(蓝桥杯python科目个人复习计划56)
今日复习内容:做题 例题1:最小的或运算 问题描述:给定整数a,b,求最小的整数x,满足a|x b|x,其中|表示或运算。 输入格式: 第一行包括两个正整数a,b; 输出格式&#…...
【vue】vue中数据双向绑定原理/响应式原理,mvvm,mvc、mvp分别是什么
关于 vue 的原理主要有两个重要内容,分别是 mvvm 数据双向绑定原理,和 响应式原理 MVC(Model-View-Controller): Model(模型):表示应用程序的数据和业务逻辑。View(视图&…...
基于反光柱特征的激光定位算法思路
目录 1. 识别反光柱2. 数据关联2.1 基于几何形状寻找匹配2.2 暴力寻找匹配 3. 位姿估计(最小二乘求解)4. 问题4.1 精度问题4.2 快速旋转时定位较差 1. 识别反光柱 反光柱是特殊材料制成,根据激光雷达对反光材料扫描得到的反射值来提取特征。…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...
深入理解 C++ 左值右值、std::move 与函数重载中的参数传递
在 C 编程中,左值和右值的概念以及std::move的使用,常常让开发者感到困惑。特别是在函数重载场景下,如何合理利用这些特性来优化代码性能、确保语义正确,更是一个值得深入探讨的话题。 在开始之前,先提出几个问题&…...
