日期:2014-05-18  浏览次数:20808 次

windows应用程序 窗口突然关闭,没有引发任何异常
C# code

        private void button1_Click(object sender, EventArgs e)
        {
            if (Listen.Text == "Listen")
            {

                Listen.Text = "UnListen";               
                
                con = new conVal();

                con.andon = new LinkAndon();

                con.sendmes = new Queue<byte[]>();

                con.buffer= new byte[1024];

                mt = new Mutex(true, "mymt");
                
              //  Thread T2 = new Thread(SendMessage);
                
                AsyncCallback ac = new AsyncCallback(AcceptData);

                Server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                Server.Bind(serverIP);

                Server.Listen(10);

                Server = Server.Accept();

                //erver.Receive(data);

                
                Server.BeginReceive(con.buffer, 0, con.buffer.Length, SocketFlags.None, ac, (object)con);
                
                System.Threading.Timer tm = new System.Threading.Timer(tm_Elapsed, (object)con, 0, 5000);

               // T2.Start((object)con);


            }
            else
            {

                Server.Disconnect(false);

                Listen.Text = "Listen";
            
            }
            

        }

        class conVal
        {
            //public Socket con;

            public ANDON.LinkAndon andon;

            public Queue<byte[]> sendmes;

            public bool go=true;

            public byte[] buffer;
        
        }

        private conVal con;


        void tm_Elapsed(object or)
        {

            conVal cc = (conVal)or;

            Dictionary<string, string>[] par = cc.andon.MachineStatusWrite();

            foreach (Dictionary<string, string> para in par)
            {
                string ex = "<Andon_alarm ";

                int i=1;

                string pa="";

                if (para["DEVICE_ID"] == "1")
                {
 
                    pa+="Bstate="+para["STATE"]+" ";
                
                }else pa+="Lstate="+para["STATE"]+" ";

                i++;


                ex += "tokens=" + i.ToString() + pa.ToString()+"comm='test'/>";

                Command cd = new Command(9, para["DEVICE_ID"], ex);

                byte[] combyte = Encoding.ASCII.GetBytes(cd.CommandText);

                byte[] ct = new byte[] { 0x0, 0x0, 0x0, (byte)combyte.Length };

                IEnumerable<byte> sou = ct.Concat(combyte);

                con.buffer=sou.ToArray();

                Server.BeginSend(con.buffer,0,con.buffer.Length, SocketFlags.None, SendMessage, (object)con.buffer);

               // cc.sendmes.Enqueue(sou.ToArray());

                cc.andon.updateEventState(para["ID"]);

               
            }
   
        }

        private ANDON.LinkAndon ad;

        private void SendMessage(IAsyncResult result)
        {
            try
            {

                //conVal con = (conVal)result.AsyncState;

                //while (con.go)
                //{

                //    if (con.sendmes.Count() != 0)
                //    {

                //       // mt.WaitOne();

                //        byte[] sou = con.buffer;

                //        //Server.Send(sou, sou.Length, SocketFlags.None);

                //       // mt.ReleaseMutex();
                //    }



                //}
            }
            catch (Exception e)
            { 
            
            
            }
        
        
        
        }

        private void AcceptData(IAsyncResult result)
        {