把每个函数都加上
try{
} catch(Exception )
{
  Console.WriteLine(ex.messge);
}
然后在每句 Console.WriteLine(ex.messge);设置断点,看看到底是什么原因报错

解决方案 »

  1.   

    for (int i = 0; i < list.Count; i++)
                {               
                    string chanId = list[i]["ChanId"];  
                    string param = list[i]["param"];  
                    ParameterizedThreadStart pts = null;
                    if (chanId == "9")
                        pts = new ParameterizedThreadStart(A);
                    if (chanId == "521")
                        pts = new ParameterizedThreadStart(B);
                    if (chanId == "525")
                        pts = new ParameterizedThreadStart(C);
                    if (chanId == "526")
                        pts = new ParameterizedThreadStart(D);
                    if (chanId == "532")
                        pts = new ParameterizedThreadStart(E);
                    Thread th = new Thread(pts);
                    th.Start(param);              
                }
    如果pts没赋值怎么办?代码我没测试,不过很可能是这个问题。也可能是每次都开线程,资源耗完了。
      

  2.   

    pts没赋值可能会报错,我开始可能没考虑这个问题,但是我的chanid是从XML里面读出来的,是100%会有值的,因为值是固定的只有那几种可能。 我在想是不是你说的资源耗尽。如果想解决这个问题就是一个线程执行完了 不用了就关闭是吧,但是现在问题来了:我开启一个线程后会进入下一个方法,在下一个方法里面我如何判断这个线程是不是执行完了呢,也就是说我在下一个方法里面不能调用开启线程的那个变量啊,如果定义成全局的,我是通过一个变量来开启多个的,那又如何判断是某一个方法里的某一个线程执行完了呢?
      

  3.   

    加上日志输出吧,或者用messagebox把catch里的东西show出来看看。
    我能告诉你的是,线程开多了程序不会直接崩溃退出,线程多了顶多是新开的线程不会运行,会处于等待状态,等有线程结束了,才会运行