c#编写了一个多线程程序但是出现40个线程同时运行就自动关闭程序但如果只调用39个线程就不会出现这个问题

问题大致如题:
线程代码之一:
public void ThreadProc1()
{
while (true)
{
int s = 1;
int u;
switch (infoClass.IPmin)
{
case "101":
u = 100 + s;
che(u, s);
break;
case "151":
u = 150 + s;
che(u, s);
break;
case "201":
u = 200 + s;
che(u, s);
break;
}
Thread.Sleep(1000);//将当前进程阻塞指定的毫秒数
}
}
线程调用方法:

Thread t1 = new Thread(new ThreadStart(ThreadProc1));
t1.Start();
调用的方法没错,39个线程就能完好运行,就第40个线程不行了

第1个回答  2012-08-02
楼上正解,不过也可以自己写个线程池来管理和调度你的线程,你这种情况就是一下子运行太多线程的过,可以让线程以队列的形式一个一个执行,并发最好不要太多,CLR有线程管理和控制机制的,不能无限制的并发线程。
第2个回答  2012-08-02
线程太多了,建议你使用应用程序池帮你管理线程,ThreadPool.QueueWorkItem追问

除了使用线程池的办法外还有别的办法吗?

追答

你自己写一个线程池

现在已经不推荐直接操作线程了,不仅难维护,而且对程序性能也有损害,在.net4.0添加的TPL类库可以有效的帮你管理异步任务处理

本回答被提问者采纳

c#编写了一个多线程程序但是出现40个线程同时运行就自动关闭程序但如果...
楼上正解,不过也可以自己写个线程池来管理和调度你的线程,你这种情况就是一下子运行太多线程的过,可以让线程以队列的形式一个一个执行,并发最好不要太多,CLR有线程管理和控制机制的,不能无限制的并发线程。

c#做的软件运行总自动关闭怎么回事
通常这种情况是因为程序中使用了多个线程,而这个线程是由主线程创建的,当某个线程运行过程中,出现了未处理的异常。这将导致程序从主线程跳出,如果系统没有正常对这个线程进行处理,就会导致进程自动关闭。可考虑在系统的入口程序代码中增加一下代码来得知出现了什么异常,这样就可以找到那些未处理的异常进...

C#winform使用了多线程,有时候程序再运行中直接就退出了!
直接退出是你的程序后台出现错误或是触发了异常所致,鉴于你同时用了timer和线程去刷新listView数据,可能是你创建线程刷新数据那里出错了~这个需要具体调试,但是我想说的是你的线程和timer 做的是同一件事情,timer本身就是实时去检测并刷新listView数据源的,socket无非是在接受到消息时刷新而已不是实时检...

C#语言,处理多线程时,让线程运行死循环,却有线程在处理数据时,意外退 ...
你的代码肯定有数据的错误,比如int型超过21亿溢出,非数字型字符串强制转换数字型,等等任何数据的错误都会导致线程退出,你把死循环整个try{}catch{}起来,就不会退出了

C#程序中建立了多个线程,当软件窗口关闭的时候为什么还占着电脑CPU呢...
说明自己建的线程是前台线程,所以就一直占有CPU了,窗口消息循环算一个前台线程,要当所有的前台线程关闭后应用程序才能退出。可以将Thread.IsBackground 属性设置为true使其转变为后台进程。

C#winform程序运行到多线程后跳出
你的应该是 子线程处理过程中发生了异常 现在.net 的机制是:子线程发生的异常 在主线程是捕获不到的 子线程未处理的异常都会使程序退出。你最好在 子线程的函数里去捕获异常然后处理掉

C#线程程序运行几小时后无故退出
内存不够了,想想,用线程每隔几秒就访问一次,然后创建一个线程,你还定义的是全局的线程,每次都new 一个,没有释放,几个小时就会new出来几万甚至几十万个线程,都不被释放,超级计算机也禁不起这么折腾,要么在逻辑代码中加入线程挂起,或者直接KILL掉释放。

我也遇到了一个线程自动停止的问题 C#
估计是循环中的代码因为某种原因出错了,把你while循环里的代码前后加个 while(true){try{\/\/你的代码}catch(exception e){\/\/将e.message记录一下,至于写入哪里随你的,比如存在文件或者写入系统日志中,建议用后者。}Thread.Sleep(5000);}再出错的时候检查一下这个日志看看问题在哪。

C#程序中如何启用多进程?
下面是利用多线程开启进程的代码,你参考下 for (int i = 0; i < 5; i++) { \/\/开启5条线程,每条线程开启一个进程 new System.Threading.Thread(delegate() { System.Diagnostics.Process.Start("calc.exe"); }).Start(); } ...

我在做一个多线程的程序,用C#写的,可是为什么我关闭了所有窗口以后,应 ...
2 将你的线程设置为后台线程(IsBackground = true),这样窗口都退出后这些线程会自动结束。3 或是来个狠点的 System.Environment.Exit 1. 最好,但代码会有一点多,还有Application .exit 是退出消息泵,关闭窗口的,跟关闭线程没有多大关系。要使用 Environment.Exit ...

相似回答