当前位置:编程学习 > C#/ASP.NET >>

多线程运行一会就死掉了,单步调试没问题,求高手指点,有代码

问题:
有三个线程同时运行,现在发现一个线程运行一会就不走了,设了断点也不停,但是单步调试没有问题。
代码是c#写的,附上,求高手解答。
如何解决
  private void WinForm_Load(object sender, EventArgs e)
        {
            //处理FRID部分线程
            Thread Read_consumerdata = new Thread(Read_method);
            Read_consumerdata.Start();
           //读取数据库玩家得分线程
            Thread Read_SQLscorce = new Thread(new ThreadStart(Read_SQLmethod));
            Read_SQLscorce.Start();
            //plc处理部分线程
            Thread PLC_thread = new Thread(new ThreadStart(PLC_function));
            PLC_thread.Start();

        }
这地方开启三个线程。现在第三个线程运行一两次就死了。
我的第三个线程是用来一直检测一些端口,读数据和写数据,所以用了一个大的while,按理应该一直循环执行,求高手指点为什么?
 private void PLC_function()
         {
             //计算读写循环失败次数
             int Count_S_F = 0;
             int Flage = Com_.Get_Flage();//1表示PC是主站,0表示PLC是主站
             //plc地址
             Byte addr_plc = Com_.Get_addr_plc();
             //plc读写地址
             Int16 addr_ = Com_.Get_addr_r();
            //存储读写数据
             byte[] data_plc_w = new byte[len*2];
             byte[] data_plc_r = new byte[len*2];
             //串口函数
             PLC_.Com_Prepare();
             if (Flage == 1)//pc---->plc
             {
                   while (true)
                     {
                        //判断是否返回空数组
                        int len_count = 0; 
                        //读PLC数据
                        data_plc_r = PLC_.PC_R_fuction(addr_plc, addr_, len);
                        //判断是否为空
                       // for (int i = 0; i < data_plc.Length; i++)
                       //     if (data_plc[i] == 0x00)
                       //         len_count++;
                       // if (len_count != data_plc.Length)
                      //  {
                            //sql写
                            for (int i = 0; i < len; i++)//byte转成int16
                            {
                                Int16 s = System.BitConverter.ToInt16(data_plc_r, i * 2);
                                UpData_PLC(s, i);
                            }
                            //sql读
                       //     for (int j = len,n=0; j < len *2; j++)
                       //     {
                       //         string id = "select * from PLC_DATA where ID=" + j;
                       //         Int16 s = GetData_plc(id);
                        //        byte[] ss = new byte[2];
                        //        ss = System.BitConverter.GetBytes(s);
                        //        data_plc_w[n] = ss[1];
                        //        data_plc_w[n + 1] = ss[0];
                        //        n = n + 2;
                           
                            //向plc写入成功
                            PLC_.PC_W_fuction(data_plc_w, addr_plc, addr_);
                        
                        //else
                          //  continue; 
                   }
                         
             }
             else//plc----->pc
             {
                 while(true)
                 {

                 }
             }
         } --------------------编程问答--------------------   我地个妈呀,你这。。。 --------------------编程问答-------------------- 完全没有看到线程同步的逻辑。 --------------------编程问答--------------------
引用 1 楼 huanggreat 的回复:
  我地个妈呀,你这。。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,