比如有个程序是这样的
//比如我在这里调用了beginReceive的异步接收
.......
......
private void ReceiveCallback(IAsyncResult ar)//这个是接收数据的回掉函数
{
   ......
   ......
   int len = Socket.Receive(buff,0,buff.Length,SocketFlag.None)//??为什么我这里再次用同步的Receive时 执行到这就停了
}小弟第一次用异步传送,望各位讲解下异步回调,和回调是怎么工作的?

解决方案 »

  1.   

    顶下,怎么没人回答啊?
    还有一个问题就是
    private static ManualResetEvent receivefileDone = new ManualResetEvent(false);
    receivefileDone.Reset() 和 receivefileDone.WaitOne() 有什么区别啊?
    我只知道一旦调用receivefileDone.WaitOne() 线程运行到这里就会阻止,只到某个地方调用
    receivefileDone.Set() 他才会运行。但是我看了蛮多源码,他们先是调用receivefileDone.Reset()  //这个地方已经阻止了线程
    ..........运行一系列代码(异步发送,然后再回调里调用Set())
    receivefileDone.WaitOne()  //这里为什么又调用waitone去阻止线程呢?有的是先写这句,然后调用的Reset()和WaitOne()
    ..........运行一系列代码(异步发送,然后再回调里调用Set())
    receivefileDone.Reset()
    receivefileDone.WaitOne()这2种调用有什么区别,他们各是怎样工作的?
    在线等,得到答案立马结贴!!!
      

  2.   

    private void ReceiveCallback(IAsyncResult ar)//这个是接收数据的回掉函数
    {
    ......
    ......
    int len = Socket.EndReceive(ar)//??为什么我这里再次用同步的Receive时 执行到这就停了
    }-=-------------------------
    应该用EndReceive来获取异步接受的到的结果  buffer数组弄成成全局变量 buffer里面就是你读到的Reset表示已经发出信号了 
    WaitOne就是等待这个信号的 一旦收到就继续 没有就一直等待 知道ResetReset一般在另外一个线程上执行 表示那个线程完成了  
    WaitOne在主线程上等待 收到信号就继续了 不等待了
      

  3.   

    Reset在。NET里说是将事件设置为非终止状态,导致线程阻止
    Reset一般在另外一个线程上执行 表示那个线程完成了 ???
    这是什么意思?
      

  4.   

    Reset():将信号的状态设置为非终止状态,即不让操作系统发出信号,从而导致那些只有收到信号才能继续执行的线程处于阻塞状态
    Set():将事件状态设置为终止状态,这样等待的线程将会收到信号,从而由等待状态转为继续执行.
    WaitOne():阻塞当前线程,等待操作系统为其发出信号,直到收到信号磁带解除阻塞.