首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

小弟我第一次用c#编程序 想请问一个有关问题

2012-03-24 
我第一次用c#编程序 想请教一个问题public static AutoResetEvent Single_1 new AutoResetEvent(false)

我第一次用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 (!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);   //貌似没有找到single_1的set()信号呦。    Use_Server.server.Send(Use_Server.message_out);    Single_2.Reset();    Thread.Sleep(80);  }} 

热点排行