03/08/11 22:18
BionicGod
Salve a tutti. Nel seguente listato, dopo che il metodo Cancel() viene richiamato si genera un'eccezione (ObjectDisposedException) nel metodo asincrono AcceptCall. Precisamente la riga dove si verifica l'errore è la seguente:
L'errore è riferito alla variabile Listener e dice che l'oggetto è stato eliminato.
Ecco il codice della classe completa:
L'errore si verifica perché quando chiudo il TcpListener, esso viene eliminato, ma come faccio ad interrompere il metodo AcceptCall?
Pensavo si interrompesse con la chiusura del TcpListener visto che sono correlati.
Sock = Listener.EndAcceptSocket(iar);
L'errore è riferito alla variabile Listener e dice che l'oggetto è stato eliminato.
Ecco il codice della classe completa:
using System; using System.Net; using System.Net.Sockets; namespace Help_Center { public class Connection { public static TcpListener Listener; public Socket Sock; public Byte[] Buffer = null; public const Int32 Port = 60000; public Connection() { Listener = new TcpListener(IPAddress.Any, Port); Listener.Start(); Listener.BeginAcceptSocket(new AsyncCallback(AcceptCall), Listener); } [b]public void Cancel() { Listener.Stop(); UserEvent -= u_UserEvent; }[/b] void Receive(IAsyncResult iar) { ((Socket)iar.AsyncState).EndReceive(iar); String[] Login = Functions.BytesToStrArr(Buffer); if (Login[0].Trim() == "LOGIN") MessageBox.Show(Login[1]); else Sock.Close(); } void AcceptCall(IAsyncResult iar) { Sock = Listener.EndAcceptSocket(iar); Buffer = new Byte[Sock.Available]; Sock.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, new AsyncCallback(Receive), Sock); Listener.BeginAcceptSocket(new AsyncCallback(AcceptCall), Listener); } } }
L'errore si verifica perché quando chiudo il TcpListener, esso viene eliminato, ma come faccio ad interrompere il metodo AcceptCall?
Pensavo si interrompesse con la chiusura del TcpListener visto che sono correlati.
aaa