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日

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/701201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Flink精讲】Flink 内存管理

面临的问题 目前&#xff0c; 大数据计算引擎主要用 Java 或是基于 JVM 的编程语言实现的&#xff0c;例如 Apache Hadoop、 Apache Spark、 Apache Drill、 Apache Flink 等。 Java 语言的好处在于程序员不需要太关注底层内存资源的管理&#xff0c;但同样会面临一个问题&…

从零开始学习Netty - 学习笔记 -Netty入门-EventLoop

5.Neety入门 什么是Netty Netty是一个基于Java NIO的异步事件驱动的网络应用框架。它被广泛用于开发高性能、高可靠性的网络通信程序&#xff0c;特别是服务器端和客户端程序。Netty提供了简洁而强大的API&#xff0c;使得开发者能够轻松地构建各种网络应用&#xff0c;包括实…

LiveQing视频点播流媒体RTMP推流服务功能-支持配置开启 HTTPS 服务什么时候需要开启HTTPS服务

LiveQing视频点播流媒体RTMP推流服务功能支持配置开启 HTTPS 服务什么时候需要开启HTTPS服务 1、配置开启HTTPS1.1、准备https证书1.1.1、选择Nginx类型证书下载 1.2、配置 开启 HTTPS1.2.1 web页面配置1.2.2 配置文件配置 2、验证HTTPS服务3、为什么要开启HTTPS3.1、安全性要求…

制冷系统调试的要点

包含&#xff1a;蒸发温度、冷凝温度、检验吸气温度、排气温度及过冷温度、校验自动保护元件的调定值等。这些温度参数直接影响了制冷机的性能(如制冷量及功率消耗等)&#xff0c;因而必须对其进行调整&#xff0c;使之稳定在合理的范围之内。 1、根据冷间温度来确定蒸发温度 对…

Mysql运维篇(四) MHA

大佬博文 https://www.cnblogs.com/gomysql/p/3675429.html MySQL 高可用&#xff08;MHA&#xff09; - 知乎 一、MHA简介&#xff1a; MHA&#xff08;Master High Availability&#xff09;目前在MySQL高可用方面是一个相对成熟的解决方案&#xff0c;它由日本DeNA公司y…

freeswitch 权威指南 --- 高级篇

官网文档&#xff1a;https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/ 关于 freeswitch 的公开教程&#xff1a;https://zhuanlan.zhihu.com/p/451981734 内容来自 《FreeSWITCH 权威指南》&#xff1a;目录&#xff1a;https://juejin.cn/post/702058079…

人力资源管理信息化系统如何支持企业开展管理诊断

人力资源顾问有限公司致力于帮助企业开展人力资源管理方面的各项提升改进工作&#xff0c;在长期的咨询工作中&#xff0c;最常听到企业提到的问题莫过于管理诊断方面的问题&#xff0c;事实上&#xff0c;很多企业在日常工作中&#xff0c;都意识到企业内部存在管理方面的问题…

vue3+js 实现记住密码功能

常见的几种实现方式 1 基于spring security 的remember me 功能 ​​​​​​​ localStorage 除非主动清除localStorage 里的信息 &#xff0c;不然永远存在&#xff0c;关闭浏览器之后下次启动仍然存在 存放数据大小一般为5M 不与服务器进行交互通信 cookies 可以…

第11章 互连网络体系结构

之前&#xff0c;我们尚未讨论如何可靠、快速地将消息从一个节点发送到另一个节点。本章目的是讨论多个处理器互连的结构。互连网络最重要的两个性能指标是延迟和带宽。 基于共享存储多处理器的几个通信特性&#xff0c;与诸如局域网或因特网等其他网络系统相比&#xff0c;共…

react hook使用UEditor引入秀米图文排版

里面坑比较多&#xff0c;细节也比较多 以下使用的是react 18 ice3.0&#xff0c;使用其他react脚手架的配置基本相同&#xff0c;例如umi4 1.下载UEditor 进入UEditor仓库&#xff0c;找到版本v1.4.3.3&#xff0c;点击进去 接着下载ueditor1_4_3_3-utf8-jsp.zip版本 下载好…

【人工智能】减轻 LLM 幻觉的 7 大策略

一、说明 大型语言模型 &#xff08;LLM&#xff09; 的引入为人工智能 &#xff08;AI&#xff09; 和机器学习 &#xff08;ML&#xff09; 领域带来了重大的范式转变。凭借其显着的进步&#xff0c;LLM 现在可以生成不同主题的内容&#xff0c;解决复杂的查询&#xff0c;并…

CentOS 7 定时任务 + Shell 脚本自动备份 MySQL 数据库(一次 Halo 建站数据库丢失的教训)

文章目录 前置条件创建备份脚本设置 Cron 任务测试备份脚本备份安全和维护一键恢复自动清除备份文件常见问题总结 TIP&#xff1a; 原文链接阅读体验更佳&#xff1a;CentOS 7 自动备份 MySQL 数据库 最近抽空简单搭了一个博客&#xff0c;目前内容较少&#xff0c;后续陆续发…

信息系统服务:演绎数字时代的征程

信息系统服务作为数字化时代的基石&#xff0c;已经在人类社会的各个领域发挥着重要作用。本文将从信息系统服务的起源、发展和演化过程&#xff0c;通过生动的例子和准确客观的历史事实&#xff0c;探讨信息系统服务对人类社会的影响与变革。 1. 起源&#xff1a;信息处理的初…

Supermaven惊艳亮相:300,000个Tokens的超大上下文窗口,能否超越Copilot成为代码补全新王者?

当我看到GitHub宣布Copilot的年经常性收入突破1亿美元时&#xff0c;我意识到代码补全技术已经迈入了新的时代。 大型模型的崛起使得这些工具变得更加智能和实用&#xff0c;吸引了越来越多的开发者加入AI编码的行列。 在这个背景下&#xff0c;Supermaven发布了。这是第一个…

软件设计模式:适配器模式详解

引言 在软件设计中&#xff0c;经常会面临需要整合不同接口或系统的情况。适配器模式&#xff08;Adapter Pattern&#xff09;是一种解决这类问题的常见设计模式。本文将深入介绍适配器模式的概念、使用场景&#xff0c;并通过Java代码示例进行说明。 适配器模式概述 适配器…

TikTok直播网络不稳定是什么原因

在当今社交媒体平台中&#xff0c;TikTok以其独特的视频内容和社交互动功能而备受欢迎。然而&#xff0c;尽管TikTok为用户提供了直播功能&#xff0c;但一些用户可能会遇到TikTok直播网络不稳定的问题。那么&#xff0c;TikTok直播网络不稳定的原因是什么呢&#xff1f;以下是…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第11章 项目成本管理(五)

博主2023年11月通过了信息系统项目管理的考试&#xff0c;考试过程中发现考试的内容全部是教材中的内容&#xff0c;非常符合我学习的思路&#xff0c;因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家&#xff0c;希望更多的人能够通过考试&a…

关于Arrays类中asList(T... a)泛型参数辨析

前提 我们需要知道两点 &#xff08;1&#xff09;T指的是泛型类型&#xff0c;它只能是引用类型&#xff0c;何为引用类型&#xff1f;在java中除了基本数据类型&#xff08;如byte、short、int、long、float、double、boolean、char&#xff09;之外的所有类型都是引用类型…

车载电子测试学习内容

搜集了一些车载测试的学习内容&#xff0c;大家可以参考。

从ChatGPT到Sora,来了解大模型训练中的存储

1 从chatGPT到Sora 2022年底&#xff0c;OpenAI推出人工智能聊天机器人ChatGPT&#xff0c;开启了大模型领域的“竞速跑”模式。2024年2月15日&#xff0c;随着视频生成模型Sora的横空出世&#xff0c;OpenAI再度掀起热潮。 Sora将视频生成内容拉到了一个全新的高度&#xff0c…