2 m0 37789836 m0_37789836 于 2017.09.05 09:14 提问

关于C#异步多线程编写时插入新线程的问题

如题,C#环境下,遇到问题如下,**假设我现在执行的线程依次为pro1,2,3,这时候我通过窗体控件新建了线程pro4并且想让他在pro3后运行(插入PRO4时PRO3未结束)请问该如何处理?**
具体解释: 我的线程创建函数在timealgorithm()方法中,会依次创建线程
整体处于go按钮的点击触发方法中,如下代码:
private void go_Click(object sender, EventArgs e)
{
...
while (judgeall(finish) == false)
{
timealgorithm();
}
...
//here
}

如果我在here处添加了字符回显于richtestbox控件,他会在线程开始之前立刻显示
(ps. 所以顺带求问如何监控多个重名线程状态是否结束,我是在一个循环里创建线程,创建代码如下:
Thread pro = new Thread(new ParameterizedThreadStart(proin[x].Threadbuild));
pro.Start(timet);


我个人由于基础是C语言,开始考虑使用死循环解决,用一个按钮结束循环,但是学习C#发现按钮触发方法中死循环会直接卡死框体,故求问解决方法

4个回答

caozhy
caozhy   Ds   Rxr 2017.09.05 09:17
已采纳

用事件等待
定义一个成员变量
AutoResetEvent mEvent=new AutoResetEvent(false);
在线程3里面
mEvent.Set();
在线程4开头加上
mEvent.WaitOne();
则线程4停在这一行,直到线程3完成才继续执行

更多信息,你可以查msdn

m0_37789836
m0_37789836 实际上就是我完全无法干涉线程的执行顺序插入到尾部直接运行完还好说,如果是插入到中间则完全无法干涉
11 个月之前 回复
caozhy
caozhy 回复fightrage: 一个可变参数就可以变出100个,你只要传一个数组或者结构体对象,就可以传很多参数啦
11 个月之前 回复
m0_37789836
m0_37789836 似乎不行,我所有线程的执行函数几乎一致,只有一个可变参数n,在这种情况下似乎无法实现线程4的准确执行
11 个月之前 回复
caozhy
caozhy   Ds   Rxr 2017.09.05 09:20

在线程3里面
->
在线程3结束的地方

zbbfb2001
zbbfb2001   2017.09.05 11:48

C#中直接创建Thread是比较过时的一种做法了,可以看一下TPL, async/await编程方法。
这些多是多线程,异步编程的更好用的编程方法。

csdn4652
csdn4652   2017.09.06 17:31

是执行一样的方法吗?
可以使用线程池啊
当需要三个线程的时候设置最大线程是三个,需要四个一起执行设置最大线程是四个,
或者直接设置最大线程是100个,你需要几个就往里面添加几个

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
c#多线程与异步开发 (上)
项目中需要一些多线程或异步的知识点,找资料时看到了这篇文章,觉得讲的很不错,转载过来,想要学习的可以看原文,原文链接,感谢原作者提供好文章引言本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发。 其中委托的BeginInvoke方法以及回调函数最为常用。 而 I/O线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意I/
CSharp学习笔记之九 多线程编程
今天就来学习一下C#中的线程和进程的问题吧 在C#中要操作线程就要借助Thread这个类来进行的一些操作的,首先要事例化一个thread的类,再在这个类的基础上进行操,在实例化Thread的实例,需要提供一个委托,在实例化这个委托时所用到的参数是线程将来启动时要运行的方法。在.net中提供了两种启动线程的方式,一种是不带参数的启动方式,另一种是带参数的启动的方式。 下面给出一个多线程的
winform异步线程防止界面卡死
winform异步线程防止界面卡死
使用NUnit进行并发测试
下面的代码将演示如何使用NUnit进行并发测试,启动多线程插入多个数据,并在插入完数据后删除数据 using System;using System.Collections.Generic;using System.Text;using NUnit.Framework;using WYEng.SQLServerDAL;using System.Threading;using Syste
C#异步和线程
有几天没写博客了,挺忙的,没多少时间写!!最近在做一个App,对于菜鸟来说,那真是到处是坑!!!!     今天来看看线程和异步的问题: 1、 什么是线程和异步? 2、 线程和异步的区别? 3、 关于线程的点东西? 4、 关于异步的点东西?     分割线、分割线、分割线…………………………………………………………………………   第一个问题: 什么是线程和异步? 异步
C# 多线程、异步编程与并发服务器
一、多线程和异步的区别 多线程和异步操作两者都可以达到避免调用线程阻塞的目的。但是,多线程和异步操作还是有一些区别的。而这些区别造成了使用多线程和异步操作的时机的区别。 线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入CPU资源来运行和调度; 异步本质上是计算机硬件功能,其操作无须消耗CPU时间的I/O操作; 编写异步操作的复杂程度较高,程序主要使用回调方式进
多线程消息处理队列
JAVA入门  百度了大量资料后写了个简单消息处理队列 Node 是自己仿写的链表,参考LinkedList  至于为啥要仿写感觉学习阶段重复轮子肯定是必不可少的事情。。 package org.great.server.model; import org.great.common.model.Msg; import org.great.common.model.Node; /
c#编写串口通讯代码 多线程实现
c#编写串口通讯代码 多线程实现 对串口通信测试具有极大的参考价值
c#多线程防止界面卡死
当我们的界面需要在程序运行中不断更新数据时,当一个textbox的数据需要变化时,为了让程序执行中不出现界面卡死的现像,最好的方法就是多线程来解决 一个主线程来创建界面,使用一个子线程来执行程序并更新主界面 这个问题其实也困或了我很久,但是今天终于解决了,而且我发现很多人有这样的问题,所以我分享一个例子方便大家参考吧。 先来看看我的界面 当我点击开启线程后 下面是我的
C# for,foreach 异步多线程问题
Parallel.ForEach 和 ForEach  与 Parallel.For 和 For 一样,一个是异步执行,开辟多个线程。一个是同步执行,开辟一个线程。 简单的循环 直接同步即可 要是循环读取或者写入数据库则 异步会更高效。    public void WindowsService()         {             var service = new Guara