none
SL Socket异步能不能变成同步(老生长谈的问题,伪同步) RRS feed

  • 问题

  • 处理消息的线程:
    //执行异步接收
                while (true)
                {
                       SocketAsyncEventArgs recargs = new SocketAsyncEventArgs();
                        //设置IP,端口
                        recargs.RemoteEndPoint = endPoint;
                        //设置消息缓冲区
                        recargs.SetBuffer(buffer, 0, buffer.Length);

                        //接收消息成功回调函数
                        recargs.Completed += new EventHandler<SocketAsyncEventArgs>(ReceiveBack);

                        //接收消息
                        bool flag = socket.ReceiveAsync(recargs);
                }

    ReceiveBack:
    if (e.SocketError == SocketError.Success)
    {
        Queue<byte[]> queue = ((App)App.Current).queue;
        queue.Enqueue(e.Buffer);
      }


    当有两条消息同时过来,回调函数并不保证同步调用呀!
    有没有同步这个回调函数的方法?
    2011年6月28日 1:15

答案

  • 可以啊!你看SL4的帮助文档,看Soket类这一节,(你也可以在搜索中找到)

    Demo方法中的

    clientDone.WaitOne();这一句


    ProcessReceive方法中

    以及 clientDone.Set();

     

    这两句组合使用就是就同步执行的,只有异步交互Silverlight的一大优点。因为他强迫了大家只能使用异步。这样客户的体验就会好很多的。

    ^_^希望我的解释能让你满意


    努力!完成了js解析器,还差一个svg插件,一个绘图程序,做好自己,呵呵~!
    • 已标记为答案 Z.Tony 2011年6月30日 2:54
    2011年6月29日 11:55
    版主

全部回复

  • 可以啊!你看SL4的帮助文档,看Soket类这一节,(你也可以在搜索中找到)

    Demo方法中的

    clientDone.WaitOne();这一句


    ProcessReceive方法中

    以及 clientDone.Set();

     

    这两句组合使用就是就同步执行的,只有异步交互Silverlight的一大优点。因为他强迫了大家只能使用异步。这样客户的体验就会好很多的。

    ^_^希望我的解释能让你满意


    努力!完成了js解析器,还差一个svg插件,一个绘图程序,做好自己,呵呵~!
    • 已标记为答案 Z.Tony 2011年6月30日 2:54
    2011年6月29日 11:55
    版主
  • 谢谢,

    这个问题是 buffer声明的地方有问题,应该放在while里

    2011年6月30日 1:11