哇我上次用到的多线程真的是乍一看,非常难/麻烦,其实用过了以后就这样了,还挺方便的

需求:在应用程序点击某按钮后开始运行呈“卡死”状态时(比如检索文件这类,运行时间很长),想要弹提示框,同时让其他按钮不

可用,当程序运行结束后,再让提示框消失,恢复按钮可用

对了,这个在客户端用的比较多,写服务的话最好不要用这个方法

理清思路,步骤如下:(具体怎么看下方代码例子,有详细的注释)

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. 新手卖家选品参考,保姆级亚马逊选品攻略

    星起航跨境:新手卖家选品参考,保姆级亚马逊选品攻略 没有经验的新卖家在入驻亚马逊之前,还没有想到准备售卖什么产品,就可以根据这三个数据来判断选择的产品是否合适. 1.购物车购买数量 大多数的消费者在购 ...

  2. 重磅推荐:保姆级Java技术图谱!够学到元宵节了,赶紧收藏!

    最近因为参与社群交流的时间比较多,除了唠唠白酒的嗑之外,很大一部分时间都是看到群里问到一些关于Spring Boot和Spring Cloud应用过程中碰到的问题以及一些开发过程中的报错信息.在这些帮 ...

  3. 重磅:保姆级Java技术图谱发布!够学到元宵节了,赶紧收藏!

    最近因为参与社群交流的时间比较多,除了唠唠白酒的嗑之外,很大一部分时间都是看到群里问到一些关于Spring Boot和Spring Cloud应用过程中碰到的问题以及一些开发过程中的报错信息.在这些帮 ...

  4. 【良心教程】保姆级Python爬虫入门教程(一)——爬虫之初见

    目录 前言 爬虫究竟是什么? 爬虫的流程是怎么样的? 编写爬虫都需要熟悉哪些基础理论以及工具? 理论 HTML javascript CSS 数据库 工具 抓包工具 Python相关 总结 (博主温馨 ...

  5. 前端涨薪必读,node.js入门保姆级教程

    Node.js保姆级教程 1. Node基本概念 2. 第一个node.js程序 3. node创建get请求 4. node创建post请求 1. Node基本概念 1.1 node.js是什么? ...

  6. 【C++保姆级入门】分支结构拓展与优化

    哈喽大家好,我是iecne,本期为大家带来的是CPP/C++保姆级入门教程的第⑧期-- 分支拓展 ,包教包会,快来看看吧! 此教程适合新手小白,因为语言会十分的通俗易懂,不会有很多的专业词汇出现,可以 ...

  7. 女友问粉丝过万如何庆祝,我发万字长文《保姆级大数据入门篇》感恩粉丝们支持,学姐|学妹|学弟|小白看了就懂

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 粉丝破万了 新星计划申 ...

  8. Unified Functional Testing(UFT)15.0.2入门保姆级教程(二),图文详解。QTP

    UFT入门之验证点和参数化 UFT15.0.2教程之侦测器(ObjectSpy)及脚本录制 请移步:Unified Functional Testing(UFT)15.0.2入门保姆级教程(一),图文 ...

  9. 手把手带你入门深度学习(一):保姆级Anaconda和PyTorch环境配置指南

    手把手带你入门深度学习(一):保姆级Anaconda和PyTorch环境配置指南 一. 前言和准备工作 1.1 python.anaconda和pytorch的关系 二. Anconda安装 2.1 ...

最新文章

  1. ReentrantLock与synchronized
  2. java排队叫号_java多线程(4)模拟排队叫号程序,不能出现交替执行的结果
  3. windows 10配置VS+MPI编程环境
  4. 小余学调度:学习记录(2022.4)
  5. Project Student:维护Webapp(只读)
  6. IDEA自动勾选显示类型(specify type)
  7. 新浪的动态策略灰度发布系统:ABTestingGateway
  8. OpenCV-图像阴影调整
  9. python 标准库 —— 线程与同步(threading、multiprocessing)
  10. element 输入框点击事件_Element Input输入框的使用方法
  11. 爬取超星考试题目_2020超星测试题库导入网课答案
  12. 解决 IDEA 导入项目 中文乱码
  13. c语言编写算术编码,编程实现算术编码算法.doc
  14. BZOJ 4093: [Usaco2013 Dec]Vacation Planning
  15. [源码解读]一文彻底搞懂Events模块
  16. QQ一键登录助手_DedeCMS插件_适合FOR V55 V56 V57_GBK.zip
  17. SQL----关于三种其他类型转字符串类型的函数
  18. java 训练智能辅助系统
  19. 有手机去视频水印的app下载 迅雷下载
  20. python自动考勤脚本实现

热门文章

  1. 与橄榄山一起享受BIM的发展果实
  2. 使用 Hippo 进入 WebAssembly
  3. javaWEB(EL+JSTL实现购物车)
  4. 超级玛丽制作揭秘13小怪和火圈,模板
  5. 《华林科纳-半导体工艺》种植体刻蚀表面分析
  6. 使用mybatis-plus产生java.sql.SQLSyntaxErrorException: Table ‘数据库.xxx表‘ doesn‘t exist(坑以踩)
  7. 大学毕业后,留在北京的人,要坚强!
  8. 智能湖仓架构实践:利用 Amazon Redshift 的流式摄取构建实时数仓
  9. 站群软件更新一下发布时间
  10. MyBatis主键回填和自定义主键