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

C#未将对象引用设置到对象的实例

       /// <summary>
        /// 处理接收的数据
        /// </summary>
        /// <param name="bs"></param>
        private void HandleRecvQueue()
        {
            try
            {
                while (m_Socket.Connected)
                {
                    getRecvQueue();
                    for (int i = 0; i < m_RecvWaitQueue.Count; i++)
                    {
                        structRecvQueue recvQueue = (structRecvQueue)m_RecvWaitQueue.GetByIndex(i);
                        byte[] bs = recvQueue.bs;
                        int index = 0;
                        while (index < bs.Length)
                        {
                            if (flag)
                            {
                                m_uMsgLength = clsBitConvert.Bytes2Uint(bs, (int)index);
                                recv_Index = 0;
                                buf = new byte[m_uMsgLength];
                                for (int j = 0; j < m_uMsgLength; j++)
                                {
                                    if (index < bs.Length)
                                    {
                                        buf[j] = bs[index];
                                        recv_Index++;
                                        index++;
                                    }
                                    else
                                    {
                                        flag = false;
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                int temp = (int)m_uMsgLength - recv_Index;
                                for (int ii = 0; ii < temp; ii++)
                                {
                                    if (index < bs.Length)
                                    {
                                        buf[recv_Index] = bs[ii];
                                        recv_Index++;
                                        index++;
                                    }
                                    else
                                    {
                                        flag = false;
                                        break;
                                    }
                                }
                            }
                            //判断是否相等
                            if (recv_Index == m_uMsgLength)
                            {
                                flag = true;
                            }
                            else
                            {
                                flag = false;
                            }

                            //if (m_uMsgLength <= bs.Length)
                            {
                                if (!flag)
                                {
                                    break;
                                }
                                else
                                {
                                    clsHeader header = new clsHeader(buf);
                                    string msg = "";
                                    if (m_uMsgLength == header.MSGLength)
                                    {
                                        switch (header.Command_Id)
                                        {
                                            case (uint)CMPP_Command_Id.CMPP_CONNECT://请求连接
                                                msg = "mo收到 Connect";
                                                Console.WriteLine(msg);
                                                Login();
                                                break;
                                            case (uint)CMPP_Command_Id.CMPP_CONNECT_RESP://请求连接应答
                                                msg = "mo收到 Connect Resp";
                                                Console.WriteLine(msg);
                                                clsCmppConnectResp m_CmppConnectResp = new clsCmppConnectResp(buf);
                                                if (m_CmppConnectResp.Result == 0)
                                                {
                                                    isLogin = true;
                                                }
                                                else
                                                {
                                                    isLogin = false;
                                                }
                                                break;
                                            case (uint)CMPP_Command_Id.CMPP_TERMINATE://终止连接
                                                msg = "mo收到 Terminate";
                                                Console.WriteLine(msg);
                                                uint seq = getNextSequence();
                                                clsCmppTerminateResp m_CmppTerminateResp = new clsCmppTerminateResp(seq);
                                                clsMsgQueueItem q = new clsMsgQueueItem(seq, CMPP_Command_Id.CMPP_TERMINATE_RESP);
                                                q.MsgObj = m_CmppTerminateResp;
                                                AddWaitQueueItem(q);
                                                break;
                                            case (uint)CMPP_Command_Id.CMPP_TERMINATE_RESP://终止连接应答
                                                msg = "mo收到 Terminate Resp,与网关断开连接";
                                                Console.WriteLine(msg);
                                                CloseSocket();
                                                if (onCloseWindowEvent != null && EXIT_FLAG)
                                                {
                                                    onCloseWindowEvent();
                                                }
                                                break;
                                            case (uint)CMPP_Command_Id.CMPP_SUBMIT_RESP://提交短信应答
                                                msg = "mo收到 Submit Resp";
                                                Console.WriteLine(msg);
                                                clsCmppSubmitResp m_SubmitResp = new clsCmppSubmitResp(buf);
                                                HandleRecvSubmitResp(m_SubmitResp);
                                                break;
                                            case (uint)CMPP_Command_Id.CMPP_DELIVER://短信下发
                                                HandleDeliverData(buf);
                                                msg = "mo收到 Deliver";
                                                Console.WriteLine(msg);
                                                AddRECV();
                                                break;
                                            case (uint)CMPP_Command_Id.CMPP_ACTIVE_TEST://激活测试
                                                msg = "mo收到 Ping";
                                                Console.WriteLine(msg);
                                                clsCmppActiveTestResp m_CmppActiveTestResp = new clsCmppActiveTestResp(clsBitConvert.Bytes2Uint(buf));
                                                sendData(m_CmppActiveTestResp.toByte());
                                                break;
                                            case (uint)CMPP_Command_Id.CMPP_ACTIVE_TEST_RESP://激活测试应答
                                                msg = "mo收到 Ping Resp";
                                                Console.WriteLine(msg);
                                                SubSendActuveTestNum();
                                                break;
                                            default:
                                                msg = "mo未知消息";
                                                Console.WriteLine(msg);
                                                break;
                                        }
                                    }
                                    
                                }
                            }
                        }
                        RemoveRecvQueue(recvQueue);
                    }
                    Thread.Sleep(10);
                }
            }
            catch (SocketException ex)
            {
              clsBitConvert.DebugBytes("HandleRecvQueue : " + ex.Message, "RecvDataerr.txt");

            }
            catch (Exception ex)
            {
                clsBitConvert.DebugBytes("HandleRecvQueue : " + ex.Message, "molog.txt");
                Thread.Sleep(100);
                CloseSocket();
                myclose();
            }
        }

        private void myclose()
        {
           System.Diagnostics.Process [] myProcess;
           myProcess = System.Diagnostics.Process.GetProcessesByName("smsrun.exe");
           foreach (System.Diagnostics.Process instance in myProcess)
            {
                string pro = instance.ToString();
                pro = pro.Replace("System.Diagnostics.Process (", "");
                pro = pro.Replace(")", "");
                instance.WaitForExit(100);
                instance.CloseMainWindow();
            }

        } 
为什么会出现(HandleRecvQueue: 未将对象引用设置到对象的实例)这个错误,请高手指点一下
并且myclose()也不会被执行 --------------------编程问答-------------------- 程序太长了,
肯定是哪里的值为null了.lz在你的方法里设个断点自己调试一下.
遇到问题要先尝试自己解决,最起码要知道问题出在具体的哪一行. --------------------编程问答-------------------- 设置断点跟踪下,应该是一个对象为null,但是你还在访问他的成员,导致出现这错误 --------------------编程问答-------------------- 楼主:应该是连接断开了。


或是连接对象没有在连接前实例化。 --------------------编程问答-------------------- 单步调试,哪里报错就知道了 --------------------编程问答-------------------- 单步调试很容易找到原因的。可以试试看。 --------------------编程问答-------------------- 在你的HandleRecvQueue方法的catch (Exception ex)这行设置一个断点,然后按F5运行你的程序,待到执行到这个断点时,将鼠标光标放在ex上,将其展开,可以根据StackTrace的信息判断是哪行出了问题,然后再仔细检查那一行,看是否有对象定义了但是没有被new出来。
--------------------编程问答-------------------- 楼上可用!~
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,