热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

在一个按钮事件中,多个线程等待一个线程完成后,剩下的其他线程再开始执行,求助各位大神

在一个按钮事件中,多个线程(如线程A,B,C)等待一个线程(线程X)完成后,剩下的其他线程再开始执行,求助各位大神
在一个按钮事件中,多个线程(如线程A,B,C)等待一个线程(线程X)完成后,剩下的其他线程再开始执行,求助各位大神

9 个解决方案

#1


你在线程X代码的最后一行,启动A,B,C不就达到你的目的了?

#2


使用backgroundWorker
在backgroundWorker1_DoWork里执行线程X的内容
在backgroundWorker1_RunWorkerCompleted里执行线程A,B,C
完全符合backgroundWorker的设计要求

#3


使用线程池,或者直接锁定线程,又或者锁定线程访问的对象都可以实现

#4


Task  reportData2 = Task.Factory.StartNew(() => ThreadProc_One())
                                       .ContinueWith(() => ThreadProc_Two())
                                       .ContinueWith(() => ThreadProc_Three());

ThreadProc_One, Two, Three, 是你的三个线程函数。把这行代码拷贝到你的代码中,就可运行。
上面代码执行顺序: 先运行One,完成后调用Two。最后调用Three。

#5


引用 4 楼 fanchka 的回复:
Task  reportData2 = Task.Factory.StartNew(() => ThreadProc_One())
                                       .ContinueWith(() => ThreadProc_Two())
                                       .ContinueWith(() => ThreadProc_Three());

ThreadProc_One, Two, Three, 是你的三个线程函数。把这行代码拷贝到你的代码中,就可运行。
上面代码执行顺序: 先运行One,完成后调用Two。最后调用Three。

Task正解

#6


引用 4 楼 fanchka 的回复:
Task  reportData2 = Task.Factory.StartNew(() => ThreadProc_One())
                                       .ContinueWith(() => ThreadProc_Two())
                                       .ContinueWith(() => ThreadProc_Three());

ThreadProc_One, Two, Three, 是你的三个线程函数。把这行代码拷贝到你的代码中,就可运行。
上面代码执行顺序: 先运行One,完成后调用Two。最后调用Three。

我的意思是X执行完后,A,B,C是同时开始执行,ABC是并行的关系

#7


引用 1 楼 Forty2 的回复:
你在线程X代码的最后一行,启动A,B,C不就达到你的目的了?

+1

#8


引用 1 楼 理论自信不靠删贴的回复:
你在线程X代码的最后一行,启动A,B,C不就达到你的目的了?

为什么这么写了之后,我的x线程执行了两次呢?

#9


引用 8 楼 yyf88的回复:
Quote: 引用 1 楼 理论自信不靠删贴的回复:
你在线程X代码的最后一行,启动A,B,C不就达到你的目的了?

为什么这么写了之后,我的x线程执行了两次呢?

哦,是我自己写错了,你这个方法是可行的,多谢

推荐阅读
  • 本文旨在探讨Linux系统中两种重要的进程间通信(IPC)机制——System V和POSIX的标准及其特性,为开发者提供深入的理解。 ... [详细]
  • MySQL查询语句深入解析与应用实例
    本文详细介绍了MySQL查询语句的应用技巧,包括排除特定记录的高级查询方法以及UNION和UNION ALL的使用场景与性能对比。通过具体示例,帮助读者理解如何优化查询以提高数据库操作效率。 ... [详细]
  • Oracle中打开10046Trace的各种方法10046trace的跟踪等级10046是一个Oracle的内部事件(event),通过设置这个事件可以得到Oracl ... [详细]
  • 本文档详细介绍了如何在Android应用中实现侧滑菜单(SlidingMenu)功能,包括设置侧边栏、全屏触摸模式以及初始化Fragment的具体步骤。 ... [详细]
  • 本文介绍了如何在Java中使用`JCheckBoxMenuItem.setMnemonic()`方法,并提供了多个实际应用的代码示例。 ... [详细]
  • 本文介绍了FTP(文件传输协议)的基础知识,包括其定义、如何通过TCP建立控制和数据连接,以及主动模式与被动模式的区别。FTP作为一种重要的文件传输协议,在互联网数据交换中扮演着关键角色。 ... [详细]
  • 华为交换机VLAN间通信配置指南
    本文详细介绍了如何在华为交换机上配置VLAN间的通信,包括VLAN的创建、VLAN接口的配置以及Trunk和Access端口的设置。通过具体步骤指导读者完成网络配置,确保不同VLAN之间的设备能够互相访问。 ... [详细]
  • Apollo入门指南
    Apollo是一个分布式配置中心,由服务端和客户端组成,支持配置的集中管理和动态更新。 ... [详细]
  • 理解HTTP状态码及其应用
    本文详细解析了HTTP状态码的分类及常见代码的意义,帮助开发者和用户更好地理解和解决网络请求中遇到的问题。 ... [详细]
  • 这个报错出现在userDao里面,sessionfactory没有注入。解决办法:spring整合Hibernate使用test测试时要把spring.xml和spring-hib ... [详细]
  • 本文讨论了在处理分页数据时常见的低级错误,并提供了优化后的代码示例,以减少重复代码并提高可读性和维护性。 ... [详细]
  • 本文探讨了Flutter和Angular这两个流行框架的主要区别,包括它们的设计理念、适用场景及技术实现。 ... [详细]
  • 本文介绍了在Linux系统中如何使用不同的命令和工具来查看和检查端口状态,包括有权限和无权限情况下的操作方法。 ... [详细]
  • Qt6 QML 图像绘制与剪裁
    本文介绍了如何在Qt6 QML的画布中加载和绘制图像,并详细说明了图像剪裁的实现方法。 ... [详细]
  • 圣诞夜的驯鹿之谜:鲁道夫是公是母?
    野生动物专家探讨圣诞老人座驾上的驯鹿性别之谜 ... [详细]
author-avatar
哓尐_271
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有