winform程序运行时悄无声息的消失了,没有任何提示。如果说是代码出错,应该会跳出一个出错提示!但是什么提示都没有,但是程序会突然消失,这是为什么呢??网上看了一些资料,有的人说是因为线程太多导致的~?如果是这个原因,要怎么解决呢,不知道声明一个线程以后,线程中的方法执行完以后,线程过一段时间是否会自动释放~?
我线程申请方式如下:
[code=C#]
private System.Threading.Thread TranThread;//全局变量,申明一个线程
//调用方式   
for(int i=0;i<dtuinfo.Length; i++)//dtuinfo为对象数组,每个对象都声明一个线程
{
 string TranKeyAndValue = dtuinfo[i].DtuID.ToString() + ":" + dtuinfo[i].ServerIP + ":" +  dtuinfo[i].ServerPort.ToString();//传递的参数
   TranThread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(TranDataThread));
   TranThread.IsBackground = true;
   TranThread.Start((object)TranKeyAndValue);
}
这个方法到底会声明几个线程,还是新声明一个线程以后,会把之前的线程给释放了?还有这个方法每隔大概10分钟就会在执行一次~!
还有,如果程序不声不响的消失了,还有没可能是其他问题?
现在最多只能给100分,分不够再追加~!!!!!!

解决方案 »

  1.   

    线程里面有异常,而在线程里面你又没有做异常处理。注意,主线程里面做异常处理没有用,是捕获不到其它线程的异常的。你在TranDataThread这个方法里面做一下异常处理。直接把异常MessageBox出来看是什么东西。
      

  2.   

    但为什么没报错啊?而且我其他线程理都有用try catch 来捕获异常啊
      

  3.   

    对,线程里的异常没有处理,所以程序退出了。对异常线程try catch,就可以知道什么问题了。
      

  4.   

    System.Threading.Thread TranThread 把这句话放到循环里试一下
      

  5.   

    TranDataThread
    方法里是否会产生异常,程序运行多久后无声无息的消失?调试时是否出现问题?
      

  6.   

    光看这段代码应该没什么问题。线程一般不占用系统资源,只是进程占用资源。线程执行完后自动释放结束。
    有可能是你代码的结构不合理造成的。如果这个方法每隔10分钟执行一次,那么会不会造成上次未执行完,现在又开始执行的冲突了?毕竟不知道dtuinfo为对象数组到底有多大。
      

  7.   

    不是在线程外面,在线程执行的函数里面去Catch异常。
      

  8.   

    你用TranThread引用的线程,在没有其他引用后应该是会释放的。像你每次循环都让TranThread指向一个新线程,如果旧线程没有其他地方引用,并且自身是挂起状态,会在下一个周期回收,你也可以调用GC.Collect()强制回收(可能会导致其他线程先挂起)。如果你的线程里没有死循环的话,线程过多导致崩溃的可能性基本可以排除了。
    还是用Try快跟踪一下线程的行为为好。
      

  9.   

    就是说所有子线程里面都加try catch 就不会出现这种情况了
      

  10.   

      
        程序假死的原因很多....异常未处理也是一个  很多的原因  内存泄露 内存释放不及时 等等...
    可以使用 AppDomain.CurrentDomain.UnhandledException 事件 msg错误看看咯