J'ai écrit mon code à l'aide this article at msdn comme aide primaireC#: Crash on ManualResetEvent
Mon code:
private ManualResetEvent _AllDone = new ManualResetEvent(false);
internal void Initialize(int port,string IP)
{
IPEndPoint _Point = new IPEndPoint(IPAddress.Parse(IP), port);
Socket _Accpt = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_Accpt.Bind(_Point);
_Accpt.Listen(2);
while (true)
{
_AllDone.Reset();
_Accpt.BeginAccept(null, 0, new AsyncCallback(Accept), _Accpt);
_AllDone.WaitOne(); <<crash here
}
}
C'est ce qui se passe, je mis un point d'arrêt à BeginAccept (je pensais il y a le problème) , mais il marche normalement.Cependant, quand j'essaie de faire "_AllDone.WaitOne()" - le plantage du serveur.
Si _allDone ne peut pas être utilisé dans une application win32 - comment créer mon projet?
EDIT
J'ai oublié de mentionner que j'écrit _AllDone.Reset() dans accept(), mais il ne va pas là, je mets un point d'arrêt là-bas, mais il ne va pas.
private void Accept(IAsyncResult async)
{
_AllDone.Set();
Socket _Accpt = (Socket)async.AsyncState;
Socket _Handler = _Accpt.EndAccept(async);
StateObject _State = new StateObject();
_State.workSocket = _Handler;
_Handler.BeginReceive(_State.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), _State);
}
les détails de l'exception aideraient – Crippledsmurf
Il n'y a aucune exception, il se bloque seulement (crash). –
Quel genre de "serveur" est-ce? Un service Windows, ou juste une application de console agissant comme un serveur pour tester? –