假如我在A线程中创建了B线程B线程一直处于阻塞状态如何在A线程中关闭B线程

解决方案 »

  1.   

    在B中用Abort可以关闭B线程,但B一直处于阻塞我的想法是想在A中强行关闭B 因为B处于阻塞,所以A中用Abort不好使
      

  2.   

    不同意楼上 设一个信号量_shoudStop比较好--------------------------------------------------------------------------------
    专注于自动提交、发贴机、资源采集器等网络营销软件的开发及相关领域如验证码识别技术。  
    QQ群号:24733057
      

  3.   

    B中的代码大致如下
    while(信号量)
    {
       ...
       udpClient.receive();
       ...
    }
    关键是B一直在receive(),如果想马上结束B的话,通过信号量是不行的
      

  4.   

    异步方法...BeginReceive(AsyncCallback requestCallback,Object state)
      

  5.   

    LS的朋友说的对,用异步接受是关键,不要自己创建线程去接受.一下是Socket 异步接受的一个例子和它的关键代码:
    public void SetupRecieveCallback( Socket sock )
    {
        try
        {
            AsyncCallback recieveData = new AsyncCallback( OnRecievedData );
            sock.BeginReceive( m_byBuff, 0, m_byBuff.Length, 
                               SocketFlags.None, recieveData, sock );
        }
        catch( Exception ex )
        {
            MessageBox.Show( this, ex.Message, "Setup Recieve Callback failed!" );
        }
    }public void OnRecievedData( IAsyncResult ar )
    {
        // Socket was the passed in object
        Socket sock = (Socket)ar.AsyncState;    // Check if we got any data
        try
        {
            int nBytesRec = sock.EndReceive( ar );
            if( nBytesRec > 0 )
            {
                // Wrote the data to the List
                string sRecieved = Encoding.ASCII.GetString( m_byBuff, 
                                                             0, nBytesRec );            // WARNING : The following line is NOT thread safe. Invoke is
                // m_lbRecievedData.Items.Add( sRecieved );
                Invoke( m_AddMessage, new string [] { sRecieved } );            // If the connection is still usable restablish the callback
                SetupRecieveCallback( sock );
            }
            else
            {
                // If no data was recieved then the connection is probably dead
                Console.WriteLine( "Client {0}, disconnected", 
                                   sock.RemoteEndPoint );
                sock.Shutdown( SocketShutdown.Both );
                sock.Close();
            }
        }
        catch( Exception ex )
        {
            MessageBox.Show( this, ex.Message, "Unusual error druing Recieve!" );
        }
    }给你个8错的文章,是E文,带源代码(上边的代码是其中一部分):http://www.codeproject.com/cs/internet/socketsincs.asp异步功能还有一个好处是.NET底层的Socket类库在你用异步时可以聪明到最大限度地利用通讯硬件上的线程和资源,对节省CPU资源很有帮助.