解决方案 »

  1.   

    把这个函数public static void startScan(Object so)  贴出来看看看,是不是访问了共享资源导致了死锁。
      

  2.   


    public static void startScan(Object so)
    {
       for (; ; )
                {
                    //检查消息条数,过多则删
                    CheckMsg();
                    //获得扫描参数
                    List<BjParam> Params = getParams(gid, pfid, lstGags);
                    //循环扫描每一个服务器
                    foreach (BjParam param in Params)
                    {
                           …………
                    }
               }我跟了下 就是在获得扫描参数那行代码时卡死的,这个是访问数据库获得参数的,就在访问数据库卡死了private static List<BjParam> getParams(string gid, string pfid, List<gagsModel> lstGags)
            {
                List<BjParam> Params = new List<BjParam>();            foreach (gagsModel gags in lstGags)
                {
                       string sql="……";
                         DataTable dt = DataBase.select(sql);
                    if (dt!= null && dt.Rows.Count > 0)
                    {
                        DataRow drow = dt.Rows[0];
                        BjParam Param = new BjParam();
                        Param.PfId = Convert.ToInt32(drow["PfId"].ToString());
                        Param.PfName = drow["PfName"].ToString();
                        Param.GId = Convert.ToInt32(drow["GId"].ToString());
                        Param.GName = drow["GName"].ToString();
                        Param.GKey = drow["GKey"].ToString();
                        Param.GKey2 = drow["GKey2"].ToString();
                        Param.GKeyNew = drow["GKeyNew"].ToString();
                        Param.GaId = Convert.ToInt32(drow["GaId"].ToString());
                        Param.GaName = drow["GaName"].ToString();
                        Param.GaKey = drow["GaKey"].ToString();
                        Param.GaKeyNew = drow["GaKeyNew"].ToString();
                        Param.GsId = Convert.ToInt32(drow["GsId"].ToString());
                        Param.GsName = drow["GsName"].ToString();
                        Param.GsKey = drow["GsKey"].ToString();
                        Param.GsKeyNew = drow["GsKeyNew"].ToString();
                        Param.CoinKey = drow["CoinKey"].ToString();
                        Param.CoinKeyNew = drow["CoinKeyNew"].ToString();
                        Param.CoinUnit = drow["CoinUnit"].ToString();
                        Param.OtherUnit = drow["OtherUnit"].ToString();
                        Param.YPrice = Convert.ToDecimal(drow["YPrice"].ToString());
                        Params.Add(Param);
                    }
                }
                return Params;
    }数据库操作DataBase这个类是静态的
      

  3.   

    解决了 原来database类不能是静态的,静态的话两个线程会互相影响,导致conn不停的被关闭打开,每次读取数据库,实例化一个database就不会报错了