C# 本进程执行完毕后再执行下一线程
最近做了一套MES集成系统,由上料到成品使自动化运行,其中生产过程是逐步的,但是每一个动作都需要独立的线程进行数据监听,那么就需要实现线程等待。
代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms; namespace Forms
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} CountdownEvent latch ;
private void refreshData(CountdownEvent latch)
{
latch.Signal();
} delegate void UpdateText(Control control, string text);
UpdateText color = delegate (Control control, string text)
{
control.Text = text;
}; private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(ProcessMain);
th.IsBackground = true;
th.Start();
} /// <summary>
/// 主线程函数
/// </summary>
void ProcessMain()
{
Process("");
Process("");
Process("");
MessageBox.Show("全部执行完毕");
} /// <summary>
/// 动作
/// </summary>
void Process(string value)
{
latch = new CountdownEvent();
Thread thread = new Thread(() => {
bool flag = true;
int i = ;
while (flag)
{
if (i > )
{
flag = false;
}
i++;
Thread.Sleep();
}
refreshData(latch);
});
thread.Start();
latch.Wait();
this.Invoke(color, new object[] { textBox1, value });
}
}
}
多个线程全部执行完毕后再调用方法:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms; namespace ExecutionCourseSystem
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
} CountdownEvent latch = new CountdownEvent();
private void Form3_Load(object sender, EventArgs e)
{ } private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(() => refreshData());
thread.Start();
thread = new Thread(() => refreshData());
thread.Start();
thread = new Thread(() => refreshData());
thread.Start();
thread = new Thread(() => refreshData());
thread.Start();
thread = new Thread(() => refreshData());
thread.Start();
latch.Wait();
MessageBox.Show("线程全部执行完毕");
}
private void refreshData()
{
latch.Signal();
}
}
}
C# 本进程执行完毕后再执行下一线程的更多相关文章
- Java主线程在子线程执行完毕后再执行
一.join() Thread中的join()方法就是同步,它使得线程之间由并行执行变为串行执行. public class MyJoinTest { public static void main( ...
- 用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat
用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat 摘自:https://zhidao.baidu.com/question/492732911.html @echo off ...
- JAVA设计方法思考之如何实现一个方法执行完毕后自动执行下一个方法
今天编程时,突然想起来在一些异步操作或Android原生库的时候,需要我们实现一些方法, 这些方法只需要我们具体实现,然后他们会在适当的时候,自动被调用! 例如AsyncTask,执行玩doInBac ...
- ajax请求执行完成后再执行其他操作(jQuery.page.js插件使用为例)
就我们做知,ajax强大之处在于它的异步请求,但是有时候我们需要ajax执行彻底完成之后再执行其他函数或操作 这个时候往往我们用到ajax的回调函数,但是假如你不想或者不能把接下来的操作写在回调函数中 ...
- iOS AFNetWorking中block执行完后再执行其它操作
需求:同时进行两次网络请求,网络请求是异步的,在网络请求成功后进行其它的操作.两个网络请求是这样,一个网络请求中block执行完之后,再进行其它操作,也是一样的原理,只是这时候不需要线程组了,只需要信 ...
- vue在一个方法执行完后再执行另一个方法
vue在一个方法执行完后执行另一个方法 用Promise来实现.Promise是ES6的新特性,用于处理异步操作逻辑,用过给Promise添加then和catch函数,处理成功和失败的情况 ES7中新 ...
- ES6(Promise)等一个函数执行完后再执行另一个函数
function text1(){ return new Promise((resolve, reject) => { setTimeout(function () { resolve(cons ...
- mysql定时计划任务,ON COMPLETION [NOT] PRESERVE 当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而声明PRESERVE的作用是使事件在执行完毕后不会被Drop掉
当为on completion preserve 的时候,当event到期了,event会被disable,但是该event还是会存在当为on completion not preserve的时候,当 ...
- React在componentWillMount中请求接口数据结束后再执行render
1.在getInitialState中初始化isloading,初始值false getInitialState() { return { editionid: '', isloading:false ...
随机推荐
- 转载:轻量级Config文件AppSettings节点编辑帮助类
using System.Configuration; using System.Windows.Forms; namespace Allyn.Common { public class XmlHep ...
- python中tolist()命令
- 【开发工具】secureCRT的使用
总结自己平时使用secureCRT中遇到的问题 1.安装 2.secureCRT设置标签显示远程主机ip地址
- thinkphp 查表返回的数组,js解析有UNICode编码,解决办法
public function getDeviceMsg(){ $allDevicesMsg = M("newdevicesstatus")->getField(" ...
- elementui上传文件
<el-form-item label="上传附件"> <transition name="fade"> <el-upload r ...
- 在WIN10上安装ESXI-Comstomer (转自技术社区)
I recently required the use of ESXi Customizer to integrate some NIC drivers into my ESXi 5.5 ISO. H ...
- Minimum Domino Rotations For Equal Row LT1007
In a row of dominoes, A[i] and B[i] represent the top and bottom halves of the i-th domino. (A domi ...
- idea环境配置
Idea 下载 https://www.jetbrains.com/idea/download/#section=windows idea安装(略) idea破解 window配置hosts文件:0. ...
- C++静态库与动态库(比较透彻)
这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书<程序员的自 ...
- Django中的缓存(内存,文件,redis)
一.Django中的缓存的几种方法 1)单个视图缓存.时间测试 import time from django.views.decorators.cache import cache_page @ca ...