如题:
在程序的Server窗体中 
public Server() 

  InitializeComponent(); 
  //StartListen是自定义的一个开始监听的函数; 
  Thread Server_Thread=new Thread (new ThreadStart(StartListen)); 
  Server_Thread.Start(); 

通过加断点发现: 
序在初始化后运行完上面两行代码之后,有时不调用StartListen(),在执行完Server_Thread.Start()语句后直接跳出,有时是在StartListen()的下面红色的语句处直接跳出或死机,没有反映 
private void StartListen() 

  TcpListener Server_Listener=new TcpListener(IPAddress.Any,Int32.Parse("51888")); 

再帖,请教高手!!!

解决方案 »

  1.   

    Thread Server_Thread定义到外面看看
      

  2.   

    楼主的代码在我的电脑上跑的是对的,你可以试一下在private void StartListen() 方法中打印一点信息,证明执行过了。
    设置断点的时候,我这里运行到StartListen()也会有点卡,但一会就好了,程序没有死。
      

  3.   

    我调试时试过,将那两行代码原封不动的放到一个Button的Click事件中,同样不执行,但是如果不用线程,直接调用函数,则正常运行,
    而我从网上找的例子,一样的代码却能运行!
    为什么!!!
    难道是我写的建立线程那两行代码有误???
      

  4.   

    不要用Start,采用Join函数来执行。
      

  5.   

    那两行肯定没错啦,你试试在你的startlisten()里面加入,thread.sleep(2000);看看
      

  6.   

    //服务器端代码
    namespace GKNM_Server
    {
        public partial class Server : Form
        {
            private delegate void SetListBox(string str);//声明控件委托代理
            private SetListBox setlistbox;//定义
            private Socket Server_Socket;//服务器端套接字
            private TcpListener Server_Listener;//服务器端监听
            private NetworkStream Server_NetworkStream;//服务器端基于数据访问的基础数据流
            //private StreamReader Server_sr;
            //private StreamWriter Server_sw;
            private Thread Server_Thread;//服务器端线程
            private ArrayList Arraylist;//用于存放动态增加的连接对象 
            public Server()
            {
                InitializeComponent();
                //Server_Thread = new Thread(new ThreadStart ( StartListen));
                //Server_Thread.Start();
            }
            private void SetListB(string list)
            {
                listBox1.Items.Add(list);
            }
            private void StartListen()
            { 
                string ll=string.Format("开始在{0}:{1}监听客户端连接", IPAddress.Any , Int32.Parse("51888"));
                if (listBox1.InvokeRequired == false)
                {
                    SetListB(ll);
                }
                else
                {
                    this.Invoke(new SetListBox(SetListB), new object[] { ll});
                }
                Server_Listener = new TcpListener(IPAddress.Any, Int32.Parse("51888"));
                Server_Listener.Start();//开始监听
                while (true)
                {
                    try
                    {
                        Server_Socket = Server_Listener.AcceptSocket();//接受挂起的来自客户端的连接请求
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.ToString());
                    }
                    //每接受一个连接就创建一个对应的线程来循环接收该客户端发来的消息
                    //Thread tt = new Thread(new ThreadStart(ReceivedFromClient));
                    //tt.Start();
                    ReceivedFromClient();
                }
            }
            //接收来自客户端的消息
            private void ReceivedFromClient()
            {
                Socket ssss= Server_Socket;
                try 
                {
                    if (ssss.Connected ==true )
                    {
                        Socket socket =ssss  ;  
                        //bool keepalive=true;
                        //while (keepalive )
                        //{
                            Byte[] buffer = new Byte[1024];
                            socket.Receive(buffer,buffer.Length ,0 );
                            string ClientsMessage = System.Text.Encoding.ASCII.GetString(buffer);
                            string[] messages = ClientsMessage.Split(new Char[] { '|' });
                            Console.WriteLine(messages);                        //判断消息类型
                            if (messages[0] == "CONN")
                            {
                                //Clients c = new Clients(messages[1], socket, Server_Thread);
                                //Arraylist.Add(c);string.Format("当前在线用户数:{0}", Arraylist.Count);
                                statusBar1.Text = "aaaa";
                                MessageBox.Show("修改TreeView状态");
                            }
                            if (messages[0] == "其他的...")
                            { }
                        //}
                    }
                } 
                catch (Exception ee)
                {
                    Console .WriteLine (ee.ToString ());
                }
            }
      

  7.   

     public Server() 
            { 
                InitializeComponent(); 
                //Server_Thread = new Thread(new ThreadStart ( StartListen)); 
                //Server_Thread.Start(); 

            } 
    现在就是红色的这两行不执行,不能正常开始监听!!!
      

  8.   

    谢谢上面三位!
    To:acqy
    如果不调试线程,那怎么保证期待执行的线程已经执行了?
    为什么会出现没有执行的情况??