发布时间:2026/8/22 16:05:46
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/8/22 16:05:46

sql简单笔记2

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

2026/8/22 16:00:46

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

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

2026/8/22 17:30:50

如何在编译时确定宏定义的值

如何在编译时确定宏定义的值 你是不是也碰见过这样的问题: 项目代码里到处是条件编译(#ifdef)、并且条件编译生效判断存在组合宏定义逻辑或者条件编译本身存在多重嵌套的情况,追踪代码时很难确定某个分支逻辑是否生效。同样的&…

2026/8/22 17:30:50

【机器学习】(44)—— 机器学习公平性

【机器学习】(44)—— 机器学习公平性 文章目录【机器学习】(44)—— 机器学习公平性1. 全局指标过关,仍可能伤害部分群体1.1 一个容易被忽略的场景2. 机器学习公平性在问什么问题2.1 与预测偏差篇的关系2.2 公平性讨论…

2026/8/22 17:30:50

AI旅游谁在买单?4类B端用户付费率超35%的ROI分析

2025年,我们团队做过一次实验:同一款AI旅游规划产品投放给10000个用户,定价199元每次或2980元每年。整体付费率4.2%,符合行业平均。但拆解后发现,有4类人群的付费率超过35%。这4类人不是最有钱的,不是最年轻…

2026/8/22 17:30:50

动静态库的制作和使用

一、库库本质上是多个.o文件的集合,库就相当于真正的生产车间,比如你用的stdio.h这个头文件,他就相当于使用说明书。二、静态库的制作与使用2.1 简单制作.a 就是linux中的静态库 就是多个.o文件的集合体ar -rc lib库名.a *.o2.2 使用将需要的…

2026/8/22 17:25:50

Python的weekday()一出手,星期几立马现原形

参与编程工作时, 处理日期以及时间属于一项常见且重要的任务, 不管是开展数据分析工作, 还是构建Web应用程序, 又或是开发自动化脚本, 我们时常都需要针对日常时间开展各种各样的操作。的的模块给我们提供了强大且灵活的工具用以处理这些任务, 当中()方法是一个极为实用的函数,…

2026/8/21 13:13:49

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 20:14:07

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/21 15:40:01

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/21 15:40:01

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/22 1:39:53

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…