我第一次用c#编程序 想请教一个问题
public static AutoResetEvent Single_1 = new AutoResetEvent(false);
         public static EventWaitHandle Single_2 = new EventWaitHandle(true, System.Threading.EventResetMode.ManualReset);
class Program
     {
         static void Main(string[] args)
         {
             My_Server my_server = new My_Server();
             My_Thread new_Thread = new My_Thread();
             My_Thread.Use_Server = my_server;
             string input_word = "";
             while (true)
             {
                 My_Thread.Single_2.WaitOne(50);
                 input_word = Console.ReadLine();
                 if (input_word != "#00")
                 {
                     my_server.Input(input_word);
                     My_Thread.Single_1.Reset();
                     My_Thread.Single_2.Set();
                     Thread.Sleep(80);
                     Console.Write("服务器:");
                     Console.Write(input_word);
                 }
                 else
                 {
                     my_server.QUIT = true;
                     break;
                 }
             }
             My_Thread.Listen.Join();
             My_Thread.Speak.Join();
             return;
         }
     };
这两个是线程函数
         static void Do_Listen(object data)
         {
             while (!Use_Server.QUIT)
             {
                 if (Use_Server.server.Receive(Use_Server.message_in) != 0)
                 {
                     Console.Write("客户端:");
                     string string_in = System.Text.Encoding.Default.GetString(Use_Server.message_in);
                     Console.Write(string_in);
                 }
             }
         }
         static void Do_Speak(object data)
         {
             while (!Use_Server.QUIT)
             {
                 Single_1.WaitOne(50);
                 Use_Server.server.Send(Use_Server.message_out);
                 Single_2.Reset();
                 Thread.Sleep(80);
             }
         }
这是我自己随写着玩的一个聊天程序。VC++写运行良好,但是用C#这两个线程函数就怎么也运行不好。WaitOne()这个方法要么就一直挂起我的线程,要不就一直不挂起我的线程。十分郁闷。在这里我想问问我的两个事件哪里错了。
我这个设计就是:有文本输入的时候线程发送数据,没有的时候挂起线程。
这么设计只是想了解一下c#的线程管理,只要有人改下语句我就能看明白啦,谢谢。
------解决方案--------------------
从代码粗看,貌似两个互斥锁用混了,最好摘清楚用途再搞,另外,异步聊天也可以设计成异步通信方式。
C# code
  public static AutoResetEvent Single_1 = new AutoResetEvent(false);
  public static EventWaitHandle Single_2 = new EventWaitHandle(true, system.Threading.EventResetMode.ManualReset);
class Program
{
   static void Main(string[] args)
   {
     My_Server my_server = new My_Server();
     My_Thread new_Thread = new My_Thread();
     My_Thread.Use_Server = my_server;
     string input_word = "";
     while (true)
     {
       My_Thread.Single_2.WaitOne(50);
       input_word = Console.ReadLine();
       if (input_word != "#00")
       {
         my_server.Input(input_word);
         My_Thread.Single_1.Reset();
         My_Thread.Single_2.Set();   //???一个线程内,自己set自己的waitone()?, 咋set呀
         Thread.Sleep(80);           
         Console.Write("服务器:");
         Console.Write(input_word);
       }
      else
      {
        my_server.QUIT = true;
        break;
      }
    }
 
    My_Thread.Listen.Join();
    My_Thread.Speak.Join();
    return;
  }
};
这两个是线程函数
static void Do_Listen(object data)
{
    while (!