public void Disconnect()
{
if (_processing[0])
return;
_processing[0] = true;
bool raise = Connected;
Connected = false;
if (_handle != null)
_handle.Close();
if (_sendQueue != null)
_sendQueue.Clear();
_sendBuffer = new byte[0];
_readBuffer = new byte[0];
if (raise)
_asyncOperation.Post(x => OnClientState(false), null);
UserState = null;
_endPoint = null;
}