winform3

发布时间:2026/10/22 1:37:50

winform3 OpenFileDialogpublic partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){//定义一个文件打开控件OpenFileDialog ofd new OpenFileDialog();//设置打开对话框的初始目录默认目录为exe运行文件所在的路径ofd.InitialDirectory Application.StartupPath;//设置打开对话框的标题ofd.Title 请选择要打开的文件;//设置打开对话框可以多选ofd.Multiselect false;//设置对话框打开的文件类型ofd.Filter 文本文件|*.txt|音频文件|*.wav|图片文件|*.jpg|所有文件|*.*;//设置对话框是否记忆之前打开的目录ofd.RestoreDirectory false;if (ofd.ShowDialog() DialogResult.OK){string reg1 jpg$|png$;string reg2 txt$;//获取用户选择的文件完整路径string filePath ofd.FileName;Console.WriteLine(filePath);if (Regex.IsMatch(filePath, reg1)){//图片显示pictureBox1.SizeMode PictureBoxSizeMode.StretchImage; //使图像拉伸或收缩以适合PictureBoxthis.pictureBox1.ImageLocation filePath;}else if (Regex.IsMatch(filePath, reg2)){Console.WriteLine(File.ReadAllText(filePath));}}}正则表达式//什么是正则表达式//1.正则表达式(Regular Expression)是一种文本模式//包括普通字符如a - z,A - Z,0 - 9等和特殊字符如,?,*等。//2.正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。//3.正则表达式使用场景 比如 登录 册 验证邮箱 验证电话 验证密码等注// 2.正则表达式基本使用// 1 ^和$边界符 ^匹配开头 $匹配结尾string reg2 ^abc; //匹配字符串是不是以abc开头string reg3 abc$; //匹配字符串是不是以abc结尾// 2[]字符集 [] 表示一系列的字符可被匹配,只要匹配其中一个就可以var reg4 ^[0-9]; //匹配开头为数字的字符串var reg5 ^[a-z]; //匹配开头为小写字母的字符串var reg6 ^[A-Z]; //匹配开头为大写字母的字符串var reg7 ^[A-Za-z0-9] ; //匹配开头为字母或者是数字的字符串//3)^出现在[]内部 代表取反的意思var reg8 ^[^0-9]; //匹配开头不为数字的字符串// (4) 匹配前面的子表达式一次或多次。// 例如zo 能匹配 zo 以及 zoo但不能匹配 z。 等价于 {1,}var reg9 zo;// 6.* 匹配前面的子表达式0次或者多次// 例如zo* 能匹配 z 以及 zoo。* 等价于{0,}。var reg10 zo*;// 7. ?匹配前面的子表达式0次或者一次// 例如do(es)? 可以匹配 do 或 does 。? 等价于 {0,1}。var reg11 do(es)?;//8. | 表示或 匹配其中的一个或多个var reg12 你好|他好|她好;//9.{} 限定{}前面字符出现的次数// {6} 6次// {6,8} 6-8次// {6,} 至少6次// \d 代表数字 类似 [0-9]var reg13 ^\d{6}; //匹配开头6位都为数字的字符串string input cdabcdefghijkabc;string pattern bci;string replacement PP;var reg222 ^abc;// 检查是否匹配bool isMatch Regex.IsMatch(input, reg4);Console.WriteLine(是否存在 isMatch);//// 替换字符串中的匹配部分//string result Regex.Replace(input, pattern, replacement);//Console.WriteLine(替换结果 result);//// 获取所有匹配//MatchCollection matches Regex.Matches(input, pattern);//foreach (Match match in matches)//{// Console.WriteLine(Found ai at position match.Index);//}//// 使用模式分割字符串//string[] parts Regex.Split(input, pattern);//foreach (string part in parts)//{// Console.WriteLine(part);//}winform 异步刷新UIwinform UI刷新 在主线程中完成1.Invoke和beiginInvoke在多线程编程中**BeginInvoke**和**Invoke**是用于跨线程更新UI的两种方法。 以下是它们的基本定义和主要区别**Invoke**是同步调用会阻塞当前线程直到目标方法执行完成。**BeginInvoke**是异步调用不会阻塞当前线程允许程序继续执行其他任务。private void button3_Click(object sender, EventArgs e) { Task.Run(() { Button button (Button)sender; Thread.Sleep(1000); Console.WriteLine(下载10%); Thread.Sleep(1000); Console.WriteLine(下载30%); Thread.Sleep(1000); Console.WriteLine(下载40%); Thread.Sleep(1000); Console.WriteLine(下载60%); Thread.Sleep(1000); Console.WriteLine(下载80%); Thread.Sleep(1000); Console.WriteLine(下载100%); ////Invoke同步 //this.Invoke(new Action(delegate () { // //回到主线程刷新UI // button.Text 下载完毕; // for (int i 0; i 100; i) // { // Console.WriteLine(1); // } //})); //Console.WriteLine(Invoke同步); //BeginInvoke异步 this.BeginInvoke(new Action(delegate () { //回到主线程刷新UI button.Text 下载完毕; for (int i 0; i 100; i) { Console.WriteLine(1); } })); Console.WriteLine(BeginInvoke异步); }); }2.async/await无返回值 不需要 await内部的结果//async/wait无返回值类型 private async void button2_Click(object sender, EventArgs e) { //主线程同步 Console.WriteLine(111); Console.WriteLine(111); Console.WriteLine(111); Console.WriteLine(111); //分线程同步 await Task.Run(() { Thread.Sleep(1000); Console.WriteLine(下载10%); Thread.Sleep(1000); Console.WriteLine(下载30%); Thread.Sleep(1000); Console.WriteLine(下载40%); Thread.Sleep(1000); Console.WriteLine(下载60%); Thread.Sleep(1000); Console.WriteLine(下载80%); Thread.Sleep(1000); Console.WriteLine(下载100%); }); //主线程同步 button2.Text 下载完毕; }有返回值方式1 需要 await内部的结果//async/wait带有返回值类型 private async void button3_Click(object sender, EventArgs e) { //主线程同步 Console.WriteLine(111); Console.WriteLine(111); Console.WriteLine(111); Console.WriteLine(111); //分线程同步 var tempTask Task.Run(() { Thread.Sleep(1000); Console.WriteLine(下载10%); Thread.Sleep(1000); Console.WriteLine(下载30%); Thread.Sleep(1000); Console.WriteLine(下载40%); Thread.Sleep(1000); Console.WriteLine(下载60%); Thread.Sleep(1000); Console.WriteLine(下载80%); Thread.Sleep(1000); Console.WriteLine(下载100%); return xiazaiwanbi; }); string a await tempTask; //主线程同步 button3.Text a; } } }有返回值方式2private async void btnGetData_Click(object sender, EventArgs e) { try { // 1. 异步获取数据await会释放UI线程不会造成界面卡顿 string resultData await GetDataAsync(); // 2. await完成后自动回到UI线程直接更新Label.Text无需手动切换 button5.Text $获取成功{resultData}; } catch (Exception ex) { // 异常处理同样在UI线程更新提示 button5.Text $获取失败{ex.Message}; } finally { // 恢复按钮可用状态 button5.Enabled true; } } /// summary /// 异步获取数据的核心方法标记为async Taskstring返回异步任务 /// /summary private async Taskstring GetDataAsync() { // Task.Delay不会阻塞UI线程是异步等待 await Task.Delay(2000); //IO流等耗时操作 using (StreamReader reader new StreamReader(1.txt)) { return await reader.ReadToEndAsync(); } }
延伸阅读

更多相关文章

2026/10/21 4:44:47

sql简单笔记2

隐性转换 :oracle 默认的将数值转换成字符,尽量避免出现隐形转换子查询 定义: 是指 一条语句 嵌套 一条或者多条查询语句 ---1. 把 外层的查询叫做 主查询 里层的查询叫做 子 查询 -- 2 里层的子查询 必须加上括号 select (select )子…

2026/10/21 19:53:34

FPS射击游戏开发完整技术点全景图

一、核心玩法系统(Gameplay Core) 1.1 射击系统 命中判定 Hitscan(射线检测)Projectile(弹道模拟)混合模式(近距离hitscan 远距离projectile) 弹道系统 弹道下坠(Bullet…

2026/10/22 2:12:20

第 12 篇 dma-mapping 的分层架构:从映射接口到 dma_map_ops

本文属于第三册“内核抽象:dma-mapping 接口的设计原则”,回答第 0 篇提出的问题 12: 一次 DMA 映射调用如何被分发至 direct、iommu、swiotlb 等不同后端 第 8 至 11 篇讨论的是驱动如何使用 dma-mapping 接口:映射契约的选择、…

2026/10/22 2:12:20

上图:2014年10月阿拉斯加费尔班克斯附近冰冻湖泊的航拍照片

ABoVE: Aerial Photographs of Frozen Lakes near Fairbanks, Alaska, October 2014简介本数据集包含美国阿拉斯加州费尔班克斯地区21个湖泊的高分辨率正射影像。航拍照片拍摄于2014年10月8日,即湖冰形成三天后。这些照片用于识别湖冰上的孔洞,这些孔洞指…

2026/10/22 2:12:20

vLLM 开源大语言模型推理服务引擎深度解析

vLLM 是目前最流行的高吞吐大语言模型(LLM)推理服务引擎之一,核心创新 PagedAttention 解决了 KV Cache 显存碎片化问题,配合连续批处理(Continuous Batching)把 GPU 利用率拉到接近上限,并通过…

2026/10/22 2:12:20

怕 AI Agent 乱删文件?Tank-OS 把它锁进不可变系统

我最近在琢磨一件事:公司里要是铺开一堆 AI Agent(比如 OpenClaw),它们能读邮件、改文件、调 API,真出事了谁来兜?翻了下最近的资料,发现 Red Hat 一位工程师 Sally OMalley 已经把这个痛点做成…

2026/10/22 2:12:20

EDID转换工具(.bin--->.txt或者.txt--->.bin)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/22 2:07:20

移动电源新国标来了,聊聊GB47372-2026软件升级要点 i

简介书接上文,“移动电源新国标GB47372-2026做了哪些升级?”我们对新国标做了一下解读。本篇主要是针对新国标“6.5 充放电温度控制”、“6.8 智能管理”、“6.9 电压调节”、“6.1 0 异常禁用”等软件相关部分做一下详细的讲解。针对新国标新增的这些功…

2026/10/21 4:53:08

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/22 0:01:49

电商智能运营体系从0到1:架构设计、落地步骤与避坑指南

前两年我们团队接了一个电商平台的运营中台项目,目标很直白:把过去靠运营拍脑袋做的选品、定价、发券、推活动这些事,逐步用数据算法和自动化流程代替。项目名字内部就叫“电商智能运营体系”。最近有不少朋友问我当时是怎么设计的、踩过哪些…

2026/10/22 0:01:49

若依框架AI代码生成不稳定?用Agent Skill三层结构+五步法搞定

最近一段时间,我一直想把后台管理系统里那些机械重复的增删改查代码交给AI去写。框架用的是若依,按理说这类业务代码模式非常固定,应该是AI最擅长的事情。可真试下来却不是那么回事——你让AI生成一个用户管理模块,它给出的Contro…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑