2 m0 37789836 m0_37789836 于 2017.09.05 09:14 提问

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

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