Socket通讯中  怎样强制关闭BeginReceive()开始的线程?就是说,如果一个Socket通过BeginReceive开始了接受数据的过程,我怎样强行结束这一过程...

解决方案 »

  1.   

    异步 BeginReceive 操作必须通过调用 EndReceive 方法来完成。通常,该方法由 callback 委托调用。此方法在操作完成前不会进入阻止状态。若要一直阻塞到操作完成时为止,请使用 Receive 方法重载中的一个。若要取消挂起的 BeginReceive,请调用 Close 方法。有关使用异步编程模型的详细信息,请参见 使用异步方式调用同步方法。
    转自MSDN
      

  2.   

    在不断的 死循环中
    加一个bool 变量 
    来判断 线程的状态
    false 就 开始
    true 就 停止
      

  3.   

    还是说你是要关闭线程
    但是不关闭连线?
    只是就问题上来看,强制结束这过程,Close是最简单的方法...
      

  4.   

    是的  我只要关闭接受信息线程  不关闭连接
    怎么Close?难道socket.close()?
      

  5.   

    static bool myEnd = true;
    static void CallbackMethod(IAsyncResult ar) 
    {
        if(myEnd) return;
        // Retrieve the delegate.
        AsyncMethodCaller caller = (AsyncMethodCaller) ar.AsyncState;    // Call EndInvoke to retrieve the results.
        string returnValue = caller.EndInvoke(out threadId, ar);    Console.WriteLine("The call executed on thread {0}, with return value \"{1}\".",
            threadId, returnValue);
    }
    用法差不多吧....
      

  6.   

    不关闭连接的前提....socket.close()关闭了连接
      

  7.   

    Begin是异步的,就是调用Begin开始处理后,就等着底层的Socket接收或者发送完数据后,才会触发CallbackMethod方法的。你可以试着把Begin方法放在一个线程中,然后结束线程?
     阿捷 
      

  8.   

    我之前遇到了类似的问题,所以我在BeginReceive()之前定义了一个等待的ManualResetEvent,waitone函数中设定了等待时间,到时间自动返回。。