我使用msdn 上的这篇文章作为主要助手编写了我的代码
我的代码:
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
}
}
这就是发生的情况,我在 BeginAccept 处设置了一个断点(我认为有问题),但它正常执行。但是,当我尝试执行“_AllDone.WaitOne()”时 - 服务器崩溃。
如果 _allDone 不能在 win32 表单应用程序中使用 - 我如何制作我的项目?
编辑
我忘了提到我在Accept()中写了_AllDone.Reset(),但它没有去那里,我在那里设置了一个断点,但它不会去。
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);
}