将参数传递给AsyncCallback函数?

use*_*403 10 c# arguments function asynccallback

我正在学习socket编程,我有以下功能:

public void OnDataReceived(IAsyncResult asyn)
Run Code Online (Sandbox Code Playgroud)

这就是回调设置的方式:

pfnWorkerCallBack = new AsyncCallback(OnDataReceived);
Run Code Online (Sandbox Code Playgroud)

问题是我需要将另一个参数传递给OnDataReceived回调函数,我该怎么做?我正在尝试创建一个简单的tcp服务器,我需要跟踪数据来自哪个客户端.有小费吗?谢谢!

MrM*_*son 8

我打算假设你在System.Net.Sockets.Socket这里使用.如果你看一下BeginReceive的重载,你会看到object参数(命名状态).您可以传递任意值作为此参数,它将流向您的AsyncCallback回调.然后,您可以使用传递给回调AsyncStateIAsyncResult对象的属性来访问它.例如;

public void SomeMethod() {
  int myImportantVariable = 5;
  System.Net.Sockets.Socket s;
  s.BeginReceive(buffer, offset, size, SocketFlags.None, new new AsyncCallback(OnDataReceived), myImportantVariable);
}

private void OnDataReceived(IAsyncResult result) {
  Console.WriteLine("My Important Variable was: {0}", result.AsyncState); // Prints 5
}
Run Code Online (Sandbox Code Playgroud)

  • 那么你将不得不使用某种容器;`public class Foo { public int Bar {get;set;} public string Baz {get;set;} }` 然后将它的一个实例传递给 `BeginReceive` 方法并将 `result.AsyncState` 转换回该类型。 (2认同)