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

C#多线程学习—主子线程,Invoke与begininvoke

一、为什么需要多线程操作?

在 WinForms 应用程序中,主线程(UI 线程)负责处理用户交互和界面更新。当执行耗时操作(如网络请求、文件读写、复杂计算)时,如果直接在 UI 线程执行,会导致界面"假死":

// 错误示例:直接在 UI 线程执行耗时操作
private void btnProcess_Click(object sender, EventArgs e)
{// 界面会卡住直到操作完成ProcessLargeData(); // 耗时 10 秒的操作lblStatus.Text = "处理完成"; // 10 秒后才会更新
}

解决方案:使用多线程将耗时操作放到工作线程执行!

二、跨线程更新 UI 的挑战

WinForms 的 UI 控件不是线程安全的,直接从非 UI 线程访问控件会抛出 跨线程操作异常

private void btnStart_Click(object sender, EventArgs e)
{new Thread(() => {// 在工作线程中尝试更新 UIlblStatus.Text = "处理中..."; // 抛出 InvalidOperationException}).Start();
}

解决方案:使用 Control.Invoke 或 Control.BeginInvoke

三、Invoke 与 BeginInvoke 详解

1. 核心概念
  • Invoke:同步调用,工作线程会阻塞等待 UI 线程执行完成

  • BeginInvoke:异步调用,工作线程立即返回不等待

2. 使用选择

     Winform/WPF中的begininvoke方法一般运用于不着急更新UI界面,没有要求立刻返回值,运行时间长的方法。

     但是对UI组件的展示信息有强制的顺序性,例如上传数据要求必须准确展示目前的上传技术,那你的labelControl控件一定是同步的,只能使用invoke。

四、主线程与子线程

        当WinForm或WPF打开运行的时候,UI线程始终在运行,但是一些IO操作如果在主线程执行,可能会占死主线程,让用户无法操作其他功能,一直在转圈圈。

        这个时候我们就可以通过Thread或者Task来创建一个子线程,不影响主线程的操作,在目前的环境中更推荐使用Task:Task可复用线程池线程,减少资源消耗,具体详解后面再学习不同的语法

http://www.dtcms.com/a/339387.html

相关文章:

  • RabbitMQ:SpringBoot+RabbitMQ入门案例
  • 《用Proxy解构前端壁垒:跨框架状态共享库的从零到优之路》
  • vue3使用RouterLink跳转的时候,路径正确但是不显示对应内容
  • Computer Using Agents:数字世界中的超级用户——架构设计与产业实践
  • RNN深层困境:残差无效,Transformer为何能深层?
  • Qt猜数字游戏项目开发教程 - 从零开始构建趣味小游戏
  • 【数据库】通过‌phpMyAdmin‌管理Mysql数据
  • 概率论基础教程第5章 连续型随机变量(二)
  • 字节开源了一款具备长期记忆能力的多模态智能体:M3-Agent
  • RabbitMQ:SpringBoot+RabbitMQ Direct Exchange(直连型交换机)
  • 第7章 React性能优化核心
  • [langgraph]创建第一个agent
  • 如何在 Git Commit Message 中正确提及共同贡献者(Co-authored-by 实践指南)
  • 图解快速排序C语言实现
  • 数据结构----八大排序算法
  • 【报文构造】构造一个异常的IPV6报文,测试设备可靠性
  • 集成电路学习:什么是Object Tracking目标跟踪
  • 浙江电信IPTV天邑TY1613_高安版_晶晨S905L3SB_安卓9_原厂固件自改_线刷包
  • Arthas 全面使用指南:离线安装 + Docker/K8s 集成 + 集中管理
  • WRC大会精彩回顾 | NanoLoong机器人足球首秀青龙机械臂咖啡服务双线出击
  • 释永信,领先10年的AI心法!
  • sqllabs(2)
  • 机器学习之数据模型训练(三)
  • 嵌入式第三十二天(信号,共享内存)
  • 装修水电全改的避坑指南有哪些?
  • [激光原理与应用-304]:光学设计 - 光学设计报告的主要内容、格式与示例:系统记录了从需求分析到最终设计的完整过程
  • windows环境,安装kafka
  • PMP项目管理:PMBOK 第六版 与 第七版 有啥区别 / 如何备考
  • Spring Boot应用实现图片资源服务
  • WSL2环境下的Claude Code与lanyuncodingui安装与配置