Tag: asynccallback

如何与许多APM BeginXXX呼叫共享AsyncCallback?

我想用许多APM风格的异步方法重用我的代码。 每种方法都有一个BeginXXX和一个EndXXX签名对。 我想在每个函数中重用相同的回调。 我一直使用下面的匿名方法,但我不知道如何将其提取为可重用的forms。 我知道这应该很简单,但我无法弄清楚如何使用委托来实现这一目标。 (这就是我自学成才) var result = tableSymmetricKeys.BeginExecuteQuerySegmented(query, token, opt, ctx, (o) => { var response = (o.AsyncState as CloudTable).EndExecuteQuerySegmented(o); token = response.ContinuationToken; int recordsRetrieved = response.Results.Count; totalEntitiesRetrieved += recordsRetrieved; Console.WriteLine(“Records retrieved in this attempt = ” + recordsRetrieved + ” | Total records retrieved = ” + totalEntitiesRetrieved); evt.Set(); }, tableSymmetricKeys); 如何使用(o) […]

C#Socket.Receive消息长度

我目前正在开发一个可以接受来自多个客户端计算机的多个连接的C#Socket服务器。 服务器的目标是允许客户端从服务器事件“订阅”和“取消订阅”。 到目前为止,我已经在这里采取了一个快乐的好看: http : //msdn.microsoft.com/en-us/library/5w7b7x5f( v = VS.100) .aspx和http://msdn.microsoft.com/ en-us / library / fx6588te.aspx的想法。 我发送的所有消息都是加密的,因此我接收了我希望发送的字符串消息,将其转换为byte []数组,然后在将消息长度预先挂起到数据之前加密数据并通过连接发送出去。 令我印象深刻的一件事是:在接收端,当收到消息的一半时,Socket.EndReceive()(或相关的回调)似乎可能会返回。 是否有一种简单的方法可以确保每条消息都“完整”并且一次只收到一条消息? 编辑:例如,我认为.NET / Windows套接字没有“包装”消息,以确保在一个Socket.Receive()调用中收到与Socket.Send()一起发送的单个消息? 或者是吗? 到目前为止我的实施: private void StartListening() { IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); IPEndPoint localEP = new IPEndPoint(ipHostInfo.AddressList[0], Constants.PortNumber); Socket listener = new Socket(localEP.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp); listener.Bind(localEP); listener.Listen(10); while (true) { // Reset the event. this.listenAllDone.Reset(); […]

如何获取在回调中传递给异步方法的参数

我需要一个传递给CallbackMethodSendRegistration中的AsyncSendRegistrationMethod的Label。 private delegate ResponceFromServer AsyncSendRegistrationDelegate(RegistrationToUser registrationToUser, Label label); private ResponceFromServer AsyncSendRegistrationMethod(RegistrationToUser registrationToUser, Label label) { SetText(label, registrationToUser.Name + ” registration…”); return Requests.DataBase.Authorization.Registration( registrationToUser.Name, registrationToUser.IdRoleUser, registrationToUser.IdGroup); } private void CallbackMethodSendRegistration(IAsyncResult ar) { var sendRegistrationDelegate = (AsyncSendRegistrationDelegate)ar.AsyncState; var responceFromServer = (ResponceFromServer)sendRegistrationDelegate.EndInvoke(ar); if(responceFromServer.IsError) { //here need label.Text } else { } }