static int ThreadCount=0;
...
if (ThreadCount<=100)
{
ServerThread=new Thread(new ThreadStart(server.startthread);
ServerThread.Priority=ThreadPriority.Normal;
ServerThread.Start();
ThreadCount++;
}
else
     {...}

解决方案 »

  1.   

    if(Proccess.GetCurrentProcess().Threads.Count()<=101){
    //.....start
    }else{
    //.....busy
    }
    ----------------------
    你的好多贴应该结一下了吧!
      

  2.   

    一定一定。但还有一个问题,就是,if(Proccess.GetCurrentProcess().Threads.Count()<=101){
    你取的是所有的进程,我只是想是执行特定代码的进程server.startthread
    那该怎么办呢,还有,上面的第一个人写的对吗,可以吗谢谢,马上就给分
    对了我的前面有一个还想问你就是http://www.csdn.net/Expert/TopicView1.asp?id=717421
      

  3.   

    上面那个人写的不完全对,用那种方法你需要在线程终止的时候加上ThreadCount--;否则你的程序就不能接受第102个联结了。即使实际只有一个线程运行。
    ------------------------------
    我是一只小小鸟
    欢迎交流!尽管问我吧,我会帮你解决的!
    尽快结帖哦!我是CSDN的菜鸟,我想获得一颗星!支持我吧!
    MSN&Mail: [email protected]
      

  4.   

    这个问题,对我来说也头痛。上面的解决方法还是存在很多其他的问题,见http://www.csdn.net/Expert/TopicView1.asp?id=717534,现在仍然没有解决。
      

  5.   

    public class server
    {   
        private static TcpListener t = new TcpListener(7);
        public  System.Threading.Thread  ServerThread;
        private static bool done=false;
        static int ThreadCount=0;
        public static void Main()
        {  
           try
            {
                 t.Start();
                 Console.WriteLine("Waiting for a connection...");//我想在这里控制线程的个数,但可能有错误,不知如何
         if(ThreadCount<=0)
                  {
            server server1=new server();
            server1.ServerThread=new Thread(new ThreadStart(server1.startthread));
            server1.ServerThread.Priority=ThreadPriority.Normal;
            server1.ServerThread.Start();
            ThreadCount++;
            Console.WriteLine(ThreadCount.ToString());
         }      
         else
          {
                     Console.WriteLine("system is busying");
                  }      
               }
           catch(Exception ex)
               { 
                 Console.WriteLine("Can't Start Server"+ex.ToString());
                 return;
               }
         }
         void startthread()
         {
           while (!done) 
           {
               try
       {
                  TcpClient s = t.AcceptTcpClient();       
                  NetworkStream stream=s.GetStream();       
               
                  byte[] bytes = new byte[2048];
                  int bytesRead = stream.Read(bytes, 0, bytes.Length);
                  string xmlfile = Encoding.ASCII.GetString(bytes,0,bytesRead); 
                  stream.Flush();  
                       
          string name= server.checkxml(xmlfile);
                  string returnmessage="hello I have get you message"+name;
                  bytes= Encoding.ASCII.GetBytes(returnmessage);
                  stream.Write(bytes, 0, bytes.Length);
                  stream.Flush();                                   
          stream.Close();
          s.Close();
              }
              catch (Exception e) 
              {   
                  Console.WriteLine(e.ToString());
          done=true;               
              } 
           }
         } 
         public static string checkxml(string xmlstream)
         {
    try
     {
                 XmlDocument xmldoc = new XmlDocument();
                 xmldoc.LoadXml(xmlstream);
                 XmlNode root = xmldoc.DocumentElement;
                 
                 string funname=xmldoc.SelectSingleNode(@"REQUEST/FUNCTION").Attributes["name"].Value.ToString();             
                 root=root.ChildNodes[0];      
                 string progid=root.FirstChild.InnerText.ToString();
                 Console.WriteLine(progid+funname);
                 return funname;
      }
     catch (Exception e) 
              {   
                 Console.WriteLine(e.ToString());
                 return "error";
              }         
          }   
    }