[新手入门] 客户端多线程怎么用 保姆级解说(啰里吧嗦)
哇我上次用到的多线程真的是乍一看,非常难/麻烦,其实用过了以后就这样了,还挺方便的
需求:在应用程序点击某按钮后开始运行呈“卡死”状态时(比如检索文件这类,运行时间很长),想要弹提示框,同时让其他按钮不
可用,当程序运行结束后,再让提示框消失,恢复按钮可用
对了,这个在客户端用的比较多,写服务的话最好不要用这个方法
理清思路,步骤如下:(具体怎么看下方代码例子,有详细的注释)
1. 点击按钮开始调用进程(里面写进程设置,和你要控制的一些东西,eg:弹提示框,同时让其他按钮不可用)
2. 进程开始/中(里面写你非常耗时的方法,注意不能有任何窗体页面上的东西,eg:你的某个按钮,控件啥的 ,但你要用,对吧?代码里有举例子,自定义类传值)
3. 进程结束(恢复按钮可用什么的,回到你的主程序上,把进程开始/中的东西也在这里还给它(主线程/主页面/诶呀就是你跑这个线程之前的那个客户端页面))
好,我们从1. 点击按钮开始
//点击开始校验private void buttonCheck_Click(object sender, RoutedEventArgs e){if (textDirectory.Text == "")//日历选择不判空是因为在试用期检验时给过了{MessageBox.Show("请选择文件路径");return;}#region 设置 弹窗等显示 &&按钮是否可用 这些东西你只要写在开始调用进程这句话(BGWorker_ShowNews.RunWorkerAsync)前都okauto_news.Visibility = Visibility.Visible;gridResultLigth.Visibility = Visibility.Hidden;buttonSelectDirectory.IsEnabled = false;buttonCheck.IsEnabled = false;outResult.IsEnabled= false;dateTransaction.IsEnabled = false;HospitalName_ComboBox.IsEnabled = false;#endregionBackgroundWorker BGWorker_ShowNews = new BackgroundWorker();BGWorker_ShowNews.DoWork += CheckFile;//设置调用进程开始时的方法,会进到CheckFile这个方法BGWorker_ShowNews.WorkerReportsProgress = true;BGWorker_ShowNews.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WhenCheckOver);//设置调用进程结束时的方法,会进到WhenCheckOver这个方法#region 开始前,有啥需要的东西写在这里。(比如设置滚动条啊什么的)//有需要在CheckFile里用的,自己定义一个类送进去needList needList = new needList();needList.dateTime = dateTransaction.SelectedDate.Value;needList.text = textDirectory.Text;#endregionBGWorker_ShowNews.RunWorkerAsync(needList);//这一句就是开始调用进程了,我们用定义好的needList传入需要的东西}
传值要用到的自定义类
//自己定义的类,用来给线程里传东西class needList{public DateTime dateTime;public string text;}
2. 进程开始/中
//进程开始,里面写了校验方法 (非常耗时)private void CheckFile(object sender, DoWorkEventArgs e){//注意!!!!!这里面不能有任何!记住是任何窗体页面上的东西都不行!用开始前自定义的类传进来//进度条之类的可以写在这里一些东西,比如改进度啊什么的needList needList = e.Argument as needList;//接收到(你想用到的东西),开始调用进程那里传的,没接收到去看看//这里写代码 Checker checker = new Checker(m_strMedInsCode, needList.dateTime,needList.text);Result result = checker.Check(dataTable, last_Date);if (true == result.IsSuccess){ listCheckResults = checker.GetCheckResult();}else{listCheckResults = null;}e.Result = result;//传给进程结束后方法 如果返回的东西很多,可以写一个类(比如我这样)return;}
3. 进程结束
//进程结束(校验文件结束了)private void WhenCheckOver(object sender, RunWorkerCompletedEventArgs e){//恢复显示啊什么的写在这里,不要!写在!上一个!Result result = e.Result as Result;//接收到 进程开始的方法CheckFile 温情传递的值if (result.IsSuccess){foreach (ResultDisplay display in s_listResultDisplays){IEnumerable<CheckResult> collectionCheckResults = listCheckResults.Where(s => s.校验表名 == display.strTableName);if (collectionCheckResults.Count() > 0){display.rectResultLight.Fill = m_brushRed;}else{display.rectResultLight.Fill = m_brushGreen;}display.datagrid.ItemsSource = collectionCheckResults;}MessageBox.Show("检测完成");}else{MessageBox.Show(result.ErrorInfo);}#region 弹窗消失,恢复按钮可用gridResultLigth.Visibility = Visibility.Visible;auto_news.Visibility = Visibility.Hidden;buttonSelectDirectory.IsEnabled = true;buttonCheck.IsEnabled = true;outResult.IsEnabled = true;dateTransaction.IsEnabled = true;HospitalName_ComboBox.IsEnabled = true;#endregion}
好了,到这里就结束了朋友们,去试试吧~
作者留言:我是觉得我写的很详细了(啰嗦),你要真是还看不懂,那,,,你留言找我吧,也没办法,谁都是从不会又着急的时候过来的,说话稍微客气点,谢谢(先给大佬比心❤)
[新手入门] 客户端多线程怎么用 保姆级解说(啰里吧嗦)相关推荐
- 新手卖家选品参考,保姆级亚马逊选品攻略
星起航跨境:新手卖家选品参考,保姆级亚马逊选品攻略 没有经验的新卖家在入驻亚马逊之前,还没有想到准备售卖什么产品,就可以根据这三个数据来判断选择的产品是否合适. 1.购物车购买数量 大多数的消费者在购 ...
- 重磅推荐:保姆级Java技术图谱!够学到元宵节了,赶紧收藏!
最近因为参与社群交流的时间比较多,除了唠唠白酒的嗑之外,很大一部分时间都是看到群里问到一些关于Spring Boot和Spring Cloud应用过程中碰到的问题以及一些开发过程中的报错信息.在这些帮 ...
- 重磅:保姆级Java技术图谱发布!够学到元宵节了,赶紧收藏!
最近因为参与社群交流的时间比较多,除了唠唠白酒的嗑之外,很大一部分时间都是看到群里问到一些关于Spring Boot和Spring Cloud应用过程中碰到的问题以及一些开发过程中的报错信息.在这些帮 ...
- 【良心教程】保姆级Python爬虫入门教程(一)——爬虫之初见
目录 前言 爬虫究竟是什么? 爬虫的流程是怎么样的? 编写爬虫都需要熟悉哪些基础理论以及工具? 理论 HTML javascript CSS 数据库 工具 抓包工具 Python相关 总结 (博主温馨 ...
- 前端涨薪必读,node.js入门保姆级教程
Node.js保姆级教程 1. Node基本概念 2. 第一个node.js程序 3. node创建get请求 4. node创建post请求 1. Node基本概念 1.1 node.js是什么? ...
- 【C++保姆级入门】分支结构拓展与优化
哈喽大家好,我是iecne,本期为大家带来的是CPP/C++保姆级入门教程的第⑧期-- 分支拓展 ,包教包会,快来看看吧! 此教程适合新手小白,因为语言会十分的通俗易懂,不会有很多的专业词汇出现,可以 ...
- 女友问粉丝过万如何庆祝,我发万字长文《保姆级大数据入门篇》感恩粉丝们支持,学姐|学妹|学弟|小白看了就懂
2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 粉丝破万了 新星计划申 ...
- Unified Functional Testing(UFT)15.0.2入门保姆级教程(二),图文详解。QTP
UFT入门之验证点和参数化 UFT15.0.2教程之侦测器(ObjectSpy)及脚本录制 请移步:Unified Functional Testing(UFT)15.0.2入门保姆级教程(一),图文 ...
- 手把手带你入门深度学习(一):保姆级Anaconda和PyTorch环境配置指南
手把手带你入门深度学习(一):保姆级Anaconda和PyTorch环境配置指南 一. 前言和准备工作 1.1 python.anaconda和pytorch的关系 二. Anconda安装 2.1 ...
最新文章
- ReentrantLock与synchronized
- java排队叫号_java多线程(4)模拟排队叫号程序,不能出现交替执行的结果
- windows 10配置VS+MPI编程环境
- 小余学调度:学习记录(2022.4)
- Project Student:维护Webapp(只读)
- IDEA自动勾选显示类型(specify type)
- 新浪的动态策略灰度发布系统:ABTestingGateway
- OpenCV-图像阴影调整
- python 标准库 —— 线程与同步(threading、multiprocessing)
- element 输入框点击事件_Element Input输入框的使用方法
- 爬取超星考试题目_2020超星测试题库导入网课答案
- 解决 IDEA 导入项目 中文乱码
- c语言编写算术编码,编程实现算术编码算法.doc
- BZOJ 4093: [Usaco2013 Dec]Vacation Planning
- [源码解读]一文彻底搞懂Events模块
- QQ一键登录助手_DedeCMS插件_适合FOR V55 V56 V57_GBK.zip
- SQL----关于三种其他类型转字符串类型的函数
- java 训练智能辅助系统
- 有手机去视频水印的app下载 迅雷下载
- python自动考勤脚本实现
热门文章
- 与橄榄山一起享受BIM的发展果实
- 使用 Hippo 进入 WebAssembly
- javaWEB(EL+JSTL实现购物车)
- 超级玛丽制作揭秘13小怪和火圈,模板
- 《华林科纳-半导体工艺》种植体刻蚀表面分析
- 使用mybatis-plus产生java.sql.SQLSyntaxErrorException: Table ‘数据库.xxx表‘ doesn‘t exist(坑以踩)
- 大学毕业后,留在北京的人,要坚强!
- 智能湖仓架构实践:利用 Amazon Redshift 的流式摄取构建实时数仓
- 站群软件更新一下发布时间
- MyBatis主键回填和自定义主键