//连接按钮
   private void bt_Connect_Click(object sender, EventArgs e)
   {
 socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
 socket.Connect(serverFullAddr);            t = new Thread(new ThreadStart(RecevieMsg));
            t.Name = "Recive Name";
            t.IsBackground = true;
            t.Start();
   }   //另个线程接收
      private void RecevieMsg()
     {
     while (true)//利用socket阻塞,无限循环接收
     {
      socket.Receive(recevie);
     }
     }
但是在接收的时候若是弹出错误(比如对方服务器关闭或我的网线断了等情况),这时候我想启动timer去定时做一些事,但是不清楚为什么,在这个线程内没能启动timer成功,代码如下—>
    private void RecevieMsg()
     {
     while (true)//利用socket阻塞,无限循环接收
     {
     try
      { 
      socket.Receive(recevie);
      }
      catch
      {
      socket.close();
      timer1.Start();//明明读过去了,但程序不去执行timer里面的内容
       break;
      }
     }
     }如何在RecevieMsg()的cacth中启动timer成功
PS:我用的timer控件

解决方案 »

  1.   

    是不是catch里面写的东西和别处不太一样,或是跨线程的原因?为什么明明启动timer了 timer却不执行?
      

  2.   

    Timer 用于以用户定义的事件间隔触发事件。Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理。它要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程。从微软的解释来看,Timer 控件是在单线程中使用的,你现在要用在多线程中自然是会出现问题了。建议改用System.Threading.Timer或者System.Timers。