当前位置: 首页 > news >正文

textbox文本框跨线程写入,扩展textobx控件

在Windows Forms中,由于UI控件不是线程安全的,直接跨线程访问和修改UI控件通常会导致不可预测的行为或异常。TextBox 控件同样不能直接从非创建它的线程进行写入。为了安全地在不同线程间更新 TextBox 控件的内容,你可以使用控件的 Invoke 方法或 BeginInvoke 方法来在控件的拥有线程(通常是主UI线程)上执行操作。

以下是一个扩展 TextBox 控件的简单示例,它提供了一个线程安全的方法来更新文本内容:

using System;  
using System.Threading;  
using System.Windows.Forms;  public class SafeTextBox : TextBox  
{  // 委托,用于定义在UI线程上执行的方法签名  public delegate void SafeSetTextCallback(string text);  // 公有方法,用于安全地设置TextBox的Text属性  public void SafeSetText(string text)  {  // 检查调用线程是否是创建控件的线程  if (this.InvokeRequired){// 如果不是,则使用Invoke在正确的线程上执行  //方法1 测试通过1//SafeSetTextCallback d = new SafeSetTextCallback(SafeSetText);//this.Invoke(d, new object[] { text });//方法2  测试通过2//Action<string> dlg = new Action<string>(SafeSetText);//this.Invoke(dlg, text);//方法3  测试通过3this.Invoke(new Action<string>(SafeSetText), text);}else  {  // 如果是,则直接设置Text属性  this.Text = text;  }  }  
}  // 使用示例  
public partial class MainForm : Form  
{  private SafeTextBox safeTextBox;  public MainForm()  {  InitializeComponent();  safeTextBox = new SafeTextBox();  safeTextBox.Dock = DockStyle.Fill;  this.Controls.Add(safeTextBox);  // 在一个后台线程中更新TextBox  Task.Run(() =>  {  // 模拟一些工作  Thread.Sleep(1000);  // 安全地更新TextBox的文本  safeTextBox.SafeSetText("这是从后台线程安全地写入的文本!");  });  }  
}

在上面的代码中,SafeTextBox 类继承自 TextBox 类,并添加了一个名为 SafeSetText 的方法。这个方法接受一个字符串参数,并使用一个委托来在UI线程上安全地设置 TextBox 的 Text 属性。如果调用 SafeSetText 的线程不是创建 TextBox 的线程(即主UI线程),则通过 Invoke 方法在正确的线程上执行该操作。如果是主UI线程,则直接设置 Text 属性。

使用 SafeTextBox 控件与使用普通的 TextBox 控件类似,但是你可以通过调用 SafeSetText 方法来安全地在后台线程中更新其文本内容。

注意:虽然上面的代码示例适用于Windows Forms应用程序,但如果你正在使用WPF或其他类型的UI框架,实现方式可能会有所不同。在WPF中,你通常会使用 Dispatcher.Invoke 或 Dispatcher.BeginInvoke 来在UI线程上执行操作。

特此记录

anlog

2024年2月23日

相关文章:

textbox文本框跨线程写入,扩展textobx控件

在Windows Forms中&#xff0c;由于UI控件不是线程安全的&#xff0c;直接跨线程访问和修改UI控件通常会导致不可预测的行为或异常。TextBox 控件同样不能直接从非创建它的线程进行写入。为了安全地在不同线程间更新 TextBox 控件的内容&#xff0c;你可以使用控件的 Invoke 方…...

【踩坑】PyTorch中指定GPU不生效和GPU编号不一致问题

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 指定GPU不生效问题 解释&#xff1a;就是使用os.environ["CUDA_VISIBLE_DEVICES"] "1"后&#xff0c;后面使用起来仍然是cuda0. 解决&#xff1a;在最开头就使用 import os os.environ[&…...

线性代数:向量、张量、矩阵和标量

线性代数&#xff1a;向量、张量、矩阵和标量 背景 在线性代数中&#xff0c;向量、张量、矩阵和标量都属于基础概念&#xff0c;特别是最近AI的爆火&#xff0c;向量和张量的概念也越来越普及&#xff0c;本文将介绍下这些基本概念。 1. 标量&#xff08;Scalar&#xff0…...

WordPres Bricks Builder 前台RCE漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…...

渗透测试—信息收集

渗透测试—信息收集 1. 收集域名信息1.1. 域名注册信息1.2. SEO信息收集1.3. 子域名收集1.3.1. 在线子域名收集1.3.2. 子域名收集工具 1.4. 域名备案信息1.5. ICP备案号查询1.6. SSL证书查询 2. 收集真实IP2.1. 超级ping2.2. Ping2.3. CDN绕过 3. 收集旁站或C段IP3.1. 旁站或C段…...

安卓adb调试备忘录

由于 MAC 的 USB 口全被占用着&#xff0c;采用无线连接刚方便&#xff0c;记录一下&#xff0c;以防忘记~ ADB原理 adb devices -l ## 列出连接的设备adb tcpip [端口号] adb tcpip 6666 # 将当前已连接USB上的Mobile端切换为TCP/IP模式&#xff0c;以6666端口进行监听. adb…...

【软件架构】01-架构的概述

1、定义 软件架构就是软件的顶层结构 RUP&#xff08;统一过程开发&#xff09;4 1 视图 1&#xff09;逻辑视图&#xff1a; 描述系统的功能、组件和它们之间的关系。它主要关注系统的静态结构&#xff0c;包括类、接口、包、模块等&#xff0c;并用于表示系统的组织结构…...

Vue 图片轮播第三方库 介绍

Vue图片轮播是一种在网页上以自动或手动方式展示图片的组件&#xff0c;常用于产品展示、网站banner等场景。有许多第三方库可以帮助Vue开发者轻松实现图片轮播功能。以下是一些流行的Vue图片轮播第三方库的介绍&#xff1a; 1. Vue-awesome-swiper - **简介**&#xff1a;V…...

设置主从复制时发生报错Could not find first log file name in binary log index file‘;解决方案

如图所示&#xff0c;slave_io_runnind:no,slave_sql_running:yes 此时&#xff0c;主从配置错误&#xff0c;我们可以查看Last_IO_Error:来查看报错信息 此时&#xff0c;我们需要停止从服务器的主从服务&#xff0c; mysql> stop slave; Query OK, 0 rows affected, 1 w…...

React Context的使用方法

背景&#xff1a;在某些场景下&#xff0c;你想在整个组件树中传递数据&#xff0c;但却不想手动地在每一层传递属性&#xff0c;你可以直接在React中使用强大的contextAPI 解决上述问题 在一个典型的React 中&#xff0c;数据通过Props属性自下而上&#xff08;由父及子&…...

ElasticSearch索引数据备份与恢复

索引数据备份 在磁盘创建备份目录并授权 # 创建备份目录 /home/esbackup # 授权 chmod 777 /home/esbackup修改配置文件elasticsearch.yml echo path.repo: ["/home/esbackup"] >> /etc/elasticsearch/elasticsearch.yml重启elasticsearch(我是docker创建的…...

kubernetes日志收集 fluent-operator 动态索引名的实现

文章目录 按照服务名区分索引名1.修改fluent-operator&#xff0c;让其支持logstash_prefix_key2.让它能获取app name作为服务名3. 拼接索引名4. 应用变更 发自个人博客&#xff1a; https://uublog.com/article/20230510/kubernetes-fluent-operator-dynamic-index-name/ 日志…...

pip换源

windows环境下&#xff1a; 比如windows账号是 admin 那么建立 admin主目录下的 pip子目录&#xff0c;在此pip子目录下建立pip的配置文件&#xff1a;pip.ini c:\users\admin\pip\pip.ini # coding: GBK [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple [ins…...

7.(数据结构)堆

7.1 相关概念 堆&#xff08;Heap&#xff09;在计算机科学中是一种特殊的数据结构&#xff0c;它通常被实现为一个可以看作完全二叉树的数组对象。以下是一些关于堆的基本概念&#xff1a; 数据结构&#xff1a; 堆是一个优先队列的抽象数据类型实现&#xff0c;通过完全二叉树…...

AWS Elastic Beanstalk通过应用负载均衡配置https

接上一篇&#xff0c;今天说说怎么通过AWS Elastic Beanstalk提供的应用负载均衡配置https。 首先创建应用和环境&#xff0c;这里应用可以使用上一篇文章中使用的demo应用&#xff08;只需要package.json和app.js文件&#xff09; 创建环境的时候&#xff0c;确认下面两个参…...

AC自动机:文本搜索的加速器

在数字化时代&#xff0c;文本数据的海洋浩瀚无垠。我们经常需要在这些数据中迅速找到特定的信息&#xff0c;比如在日志文件中查找异常、在海量文本中检索关键词&#xff0c;或是在编译代码时识别语法结构。这时候&#xff0c;AC自动机&#xff08;Aho-Corasick自动机&#xf…...

备战蓝桥杯---基础算法刷题1

最近在忙学校官网上的题&#xff0c;就借此记录分享一下有价值的题&#xff1a; 1.注意枚举角度 如果我们就对于不同的k常规的枚举&#xff0c;复杂度直接炸了。 于是我们考虑换一个角度&#xff0c;我们不妨从1开始枚举因子&#xff0c;我们记录下他的倍数的个数sum个&#…...

探索 Flutter 中的动画:使用 flutter_animate

在移动应用开发中&#xff0c;动画是提升用户体验和吸引用户注意力的关键要素之一。Flutter 作为一种跨平台的移动应用开发框架&#xff0c;提供了丰富而灵活的动画支持。其中&#xff0c;flutter_animate 是一个强大的库&#xff0c;它为 Flutter 开发者提供了简单易用的方式来…...

装机容量对光伏发电量的影响有多大?如何通过装机容量计算发电量?

光伏行业得益于全球对环保和可持续发展的重视&#xff0c;得到了快速的发展。众所周知&#xff0c;光伏电站的收益受发电量的影响&#xff0c;发电量越大收益越高&#xff0c;但发电量其实受装机容量的影响。 一、装机容量对发电量的影响 光伏发电的核心就是发电板&#xff0…...

软考37-上午题-【数据库】-数据模型、数据库的三级模式和二级映像

一、考情简介 上午题&#xff1a;6分——6道选择题 下午题&#xff1a;15分——一道分析题 E-R图、关系模式&#xff1a;下午考试必考&#xff01;&#xff01;&#xff01;&#xff08;编制也要考&#xff01;&#xff09; 二、数据模型 数据模型是对现实世界数据特征的抽象…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...