首页 > 其他分享 >Winform跨线程访问报错问题解决

Winform跨线程访问报错问题解决

时间:2024-11-21 22:28:44浏览次数:1  
标签:threadMethodHelper System new textBox1 线程 using 报错 Winform

`
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Winform跨线程访问报错问题解决
{
public partial class Form1 : Form
{
private ThreadMethodHelper threadMethodHelper;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        //解决方法1:取消跨线程调用(由于早期winform设计是线程不安全的,现在是线程安全的,用该方法会使winform变为线程不安全的,所以不推荐)
        //CheckForIllegalCrossThreadCalls = false;

        threadMethodHelper = new ThreadMethodHelper(this);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Thread thread = new Thread(new ThreadStart(Test));
        thread.Start();
    }

    /// <summary>
    /// 在线程中直接给Form的UI控件赋值报异常:
    /// System.InvalidOperationException:“线程间操作无效: 从不是创建控件“textBox1”的线程访问它。”
    /// </summary>
    //public void Test()
    //{
    //    textBox1.Text = "test1";
    //}

    //解决方法2:
    //public void Test()
    //{
    //    this.Invoke(new Action(() =>
    //    {
    //        textBox1.Text = "test1";
    //    }));

    //    this.Invoke(new EventHandler(delegate
    //    {
    //        textBox1.Text = "test1";
    //    }));
    //}


    //解决方法3:封装一个帮助类
    public void Test()
    {
        threadMethodHelper.SetText("test2", textBox1);
        Thread.Sleep(1000);
        threadMethodHelper.SetText(threadMethodHelper.GetText(textBox1), textBox2);
    }




}

}
`

标签:threadMethodHelper,System,new,textBox1,线程,using,报错,Winform
From: https://www.cnblogs.com/Wulinhai/p/18561714

相关文章

  • 【鸿蒙基于API 13实战开发】—— 进程模型&线程模型分析
    ......
  • kettle spoon连接mysql数据库报错 [mysql] : org.pentaho.di.core.exception.KettleDa
    先说结论。因为kettle/lib文件夹下没有对应版本的ar包,导致链接不上mysql。找到kettle下载文件,地址在 kettle/data-integration/lib 下载两个文件,一个5.1.41-bin文件,另一个对应自己mysql版本的jar包文件,下面举例我安装的8.0.24版本 将下载的两个jar包复制到 kettle/da......
  • MySQL 主从复制之多线程复制
    目录一、MySQL多线程复制的背景二、MySQL5.5主从复制1、原理2、部署主从复制2.1、主节点安装配置MySQL5.52.2、从节点安装配置MySQL5.53、检查主从库server_id和log_bin配置4、创建主从复制用户5、获取主库的二进制日志文件和位置6、配置从库连接主库参数并启动从库复制......
  • vscode连接远程开发机报错
    远程开发机更新,vscode连接失败报错信息"install"terminalcommanddoneInstallterminalquitwithoutput:Hostkeyverificationfailed.Receivedinstalloutput:Hostkeyverificationfailed.FailedtoparseremoteportfromserveroutputResolvererror:......
  • 2.1_6 线程的实现方式和多线程模型
    目录1、用户级线程历史背景代码实现​用户级线程的优缺点2、内核级线程概念内核级线程的优缺点3、多线程模型一对一模型多对一模型多对多模型总览1、用户级线程历史背景早期的操作系统(如:早期Unix)只支持进程,不支持线程。当时的“线程”是由线程库实现的 ......
  • 使用SqlSugar ORM框架在WinForms中连接SQLite数据库
    一,简洁SqlSugar是一个.NET平台下的ORM框架,它支持多种数据库,包括SQLite。在WinForms应用程序中使用SqlSugar可以简化数据库操作,提高开发效率。本文将指导您如何在WinForms应用程序中使用SqlSugar连接SQLite数据库。二,环境准备WinForms项目:在VisualStudio中创建或打开一个WinFor......
  • @Slf4j实现多线程场景下每个线程日志独立输出
    1.配置logbak-spring.xml<?xmlversion="1.0"encoding="UTF-8"?><configurationscan="true"scanPeriod="5seconds"><!--定义日志文件的存储路径--><propertyname="LOGS_PATH"value="./l......
  • 【C#】【winforms】MVP架构中从 Model 或 View 层主动向 Presenter 传递数据或调用处
    背景使用winforms做上位机软件,软件功能简单来说就是与串口通信。因为一个软件要应用于不同型号的下位机,采用MVP架构提高代码复用性。 其中Model层中实例化SerialPort对象:privateSerialPort_serialPort;只关注串口收发。 presenter层负责主要业务逻辑。view层负责......
  • Navicat远程连接MySQL报错2003(10060)
    背景:学习黑马微服务时,使用Navicat远程连接容器中的MySQL一直报错2003(10060),原因是容器中的MySQL配置的root用户的访问连接权限,只能是本地连接。解决方式:1)查看docker容器是否启动:dockerps-a 未启动的话:(mysql是我的容器名字)dockerstartmysql2)进入mysql容器(注意空格,r......
  • Vue项目执行【npm install】 报错
    问题执行【npminstall】报错npmERR!Whileresolving:[email protected]!Found:[email protected]!node_modules/vuenpmERR!vue@"3.4.15"fromtherootprojectnpmERR!npmERR!Couldnotresolvedependency:npmERR!peervue@"^2.6.14......